前言:

最近接到小程序的开发需求,由于之前也没开发过小程序,心情还是有点激动。先花15分钟看一遍小程序官方文档,再花10分钟看一遍mpvue官方文档,然后拿着原型图和UI图就开干。踩了不少坑,写篇博客记录一下。PS:小程序官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/ ,mpvue官方文档: http://mpvue.com/

mpvue:

mpvue 是一个使用 Vue.js 开发小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序环境中,从而为小程序开发引入了整套 Vue.js 开发体验。

不得不说对于会vue的人来说,使用mpvue开发小程序基本就是0成本,看一遍文档就能直接上手开发小程序。当然mpvue框架也有很多需要吐槽的地方:比如不支持slot,导致封装公共组件非常的不方便;不支持vue-router,不过通过引入mpvue-router-patch可以在 mpvue 中使用 vue-router 兼容的路由写法。mpvue-router-patch的GitHub地址为:https://github.com/F-loat/mpvue-router-patch。更多mpvue项目可以在https://github.com/Meituan-Dianping/mpvue/issues/21找到。

遇见的一些问题:

(1):在mpvue里面如果在A页面的created钩子函数里面进行了一些初始化操作,但是在B页面加载的时候也会执行A页面的created钩子函数里面的初始化操作

(2):小程序里面使用css的background-image是无效的,除非将图片的放在服务器端才可以。(对于习惯使用background-image布局的人来说是非常难受的)

(3):web-view组件,由于公司只是将部分页面迁移到小程序中,不可避免会存在小程序页面与h5的页面互相跳转的情况,这种情况就需要使用web-view了。

小程序跳转h5页面: 

<web-view :src="webViewUrl"></web-view>

注意:

  ①  src的地址需要在小程序管理后台配置域名白名单,h5页面内部请求的api接口不需要配置request合法域名。

  ②  路由查询参数里面的值不能使用中文,不然在iOS手机上会直接白屏,但是安卓手机上没有问题

webViewUrl = 'https://www.xxx.com?name=张三&id=1'     // 这种情况会白屏,因为name的值为中文。可以使用encodeURIComponent对查询参数进行编码

  ③  webViewUrl的地址必须是有效证书https的地址,并且页面内请求的https接口也必须是拥有有效证书,不然也会导致页面报错

  ④  webview里面的h5地址是不能调用微信支付,如果需要进行微信支付需要跳回到小程序里面支付。ps:一个小程序只能绑定一个商户号,如果需要接入第三方支付账户。只能为三方账户申请一个小程序,然后在将三方账户的商户号绑定给新的小程序。

h5页面跳回小程序:

<!-- html -->
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script> // javascript
wx.miniProgram.navigateTo({url: '/path/to/page'})
wx.miniProgram.postMessage({ data: 'foo' })
wx.miniProgram.postMessage({ data: {foo: 'bar'} })
wx.miniProgram.getEnv(function(res) { console.log(res.miniprogram) // true })

注意:

  ① h5跳回小程序只能是在当前h5页面是在webview中才能跳回小程序,不能通过这种方法实现在同一公众号下h5页面直接跳转到小程序中

  ② 通过这种方式只能跳转到原来的小程序,如果需要跳转到其他的小程序,需要先跳转到原来的小程序中,然后再跳转到其他小程序里面

(4):textarea输入框固定在页面底部时在安卓手机上第一次获取焦点不会将键盘顶起来,第一次以后就可以了。(这个是小程序自己的bug)

( 5):重构IM聊天到小程序中:

  ① 原IM聊天是使用google-protobuf将聊天数据以二进制形式传输,但是在使用.proto文件打包后的protobuf.js时发现在浏览器中是默认将库对象proto挂载到window对象上。由于小程序没有window对象,所以在小程序中引入protobuf.js文件时报错

    

      解决方法:在protobuf.js开始位置定义一个proto对象,库文件中重写proto对象的属性和方法就是在重写我定义的proto对象,然后将该对象export出去

        

  ② 在安卓6.0以下的手机连接上websocket后然后就触发onSocketError

      

      解决方法:在低版本安卓中由于服务器的相同IP以及端口上安装了多张证书导致。SSL协议只允许在一个IP端口上返回一张证书。可以通过分配不同的端口号或者不同IP地址解决这个问题。

③ 加载30条聊天记录时(具体多少项和手机性能有关)导致小程序卡死。排查了很久找到了原因是因为数组里面的每一项由protobuf解析出来的聊天数据对象比较复杂,当数组中的数据超过30条时导致小程序卡死  

  

        解决方法:拿到protobuf解析出来的聊天数据对象,去掉对象中没有用的属性和方法

总结:

  第一次开发小程序还是感觉上手挺容易的,但是在这过程中踩了很多坑,也填了很多坑。IM聊天部分是将原h5页面重构到小程序中,h5原IM聊天页面是由博客大神子慕大诗人搞的。关于websocket心跳重连和google-protobuf可以参考子慕大神的文章https://www.cnblogs.com/1wen/p/5808276.htmlhttps://www.cnblogs.com/1wen/p/6509253.html

使用mpvue开发小程序的更多相关文章

  1. 使用mpvue开发小程序教程(一)

    前段时间,美团开源了mpvue这个项目,使得我们又多了一种用来开发小程序的框架选项.由于mpvue框架是完全基于Vue框架的(重写了其runtime和compiler),因此在用法上面是高度和Vue一 ...

  2. 使用mpvue开发小程序教程(二)

    在上篇文章中,我们介绍了使用mpvue开发小程序所需要的一些开发环境的搭建,并创建了第一个mpvue小程序代码骨架并将其运行起来.在本文中,我们来研究熟悉一下mpvue项目的主要目录和文件结构. 在V ...

  3. 使用mpvue开发小程序教程(三)

    在上一篇文章中,我们熟悉了一下通过vue-cli生成的mpvue工程代码骨架的基本结构,大致了解了每一个部分的代码到底要放到何处.从本文起我们就开始涉及真正的编码部分,学习使用Vue的语法去编写小程序 ...

  4. 使用mpvue开发小程序教程(四)

    在上一章节中,我们将vue-cli命令行工具生成的代码骨架中的src目录清理了一遍,然后从头开始配置和编写了一个可以运行的小程序页面,算是正真走上了使用mpvue开发小程序的第一步.今天我们将进一步来 ...

  5. 使用mpvue开发小程序教程(五)

    在上一章节中,我们了解了组件的三个基本特性以及组件的基本使用方法.在实际的小程序开发中,我们应该以组件的思维去设计每个小程序的功能页面,对其进行合理的组件拆分,让每个部分都保持功能简洁.条理清楚.各司 ...

  6. 学习笔记:mpvue开发小程序——入门

    接下来可能要开发一个小程序,同事推荐使用mpvue,那么我提前熟悉下. 官网地址:http://mpvue.com/ 1.快速上手 http://mpvue.com/mpvue/quickstart/ ...

  7. 使用mpvue开发小程序教程(六)

    在上一章节中,我们列举了在Vue中能用但在mpvue中不能用或需要特别注意的特性,在实际开发前了解一下还是很有必要的,可以避免浪费找错误的时间. 如果你使用过原生的小程序框架,你一定经历过或思考过怎么 ...

  8. mpvue 开发小程序接口数据统一管理

    mpvue项目里做API与数据分离统一管理 小程序里请求数据接口使用wx:request,因为考虑项目比较大,最好把wx:request封装起来,统一使用管理 utils.js 配置开发环境和线上环境 ...

  9. 使用mpvue开发小程序教程

    从vue到mpvue再到微信小程序,这么几天下来感觉被搞晕了.三者之间的很多功能存在差异,项目也快接近尾声了,坑也踩了很多了,现在给后来的你们一点总结性经验: 1. 在模板中,动态插入HTML的v-h ...

随机推荐

  1. JDBC笔记总结[申明:来源于网络]

    JDBC笔记总结[申明:来源于网络] 地址:http://blog.csdn.net/Summer_YuXia/article/details/53676386?ref=myread

  2. 算法基础_递归_给定m个A,n个B,一共有多少种排列

    问题描述: 给定m个A,n个B,一共有多少种排列 解题源代码: /** * 给定m个A,n个B,问一共有多少种排列 * @author Administrator * */ public class ...

  3. [Day14]Eclipse高级、类与接口作为参数返回值

    l  不同修饰符的使用   类,最常使用public修饰   成员变量,最常使用private修饰   成员方法,最常使用public修饰 l  自定义数据类型的使用   类作为方法参数时,说明要向方 ...

  4. C++11 std::call_once:保证函数在任何情况下只调用一次

    std::call_once的作用是很简单的, 就是保证函数或者一些代码段在并发或者多线程的情况下,始终只会被执行一次.比如一些init函数,多次调用可能导致各种奇怪问题. 给个例子: #includ ...

  5. poi导入excel表格数据到数据库的时候,对出生日期的校验

    出生日期格式为8位数字的字符串 如:yyyyMMdd 规则:yyyy大于1900并小于当前时间,月.日 按日期规则校验 //解决读过来的字符串显示为科学计数法问题 BigDecimal bd = ne ...

  6. CF280D k-Maximum Subsequence Sum

    题目链接:洛谷 题目大意:[题意翻译已经够直白了] 首先,相信大家一开始都是想去直接dp,但是发现复杂度不对. 于是我们考虑一个黑科技:模拟费用流(相信大部分人看见数据范围就绝对不会想到费用流) 我们 ...

  7. 斑马打印机ZT410中文打印

    ^XA ^CW1, E:SIMSUN.TTF^CI28^FO50,50^A1N,50,50^FD汉字^FS^XZ ******************************************* ...

  8. 12.1-uC/OS-III调度的内部实现

    1.调度的内部实现通过这两个函数完成调度功能: OSSched()和OSIntExit().OSSched()在任务级被调用, OSIntExit()在中断级被调用.这两个函数都在OS_CORE.C中 ...

  9. 【二次开发】shopxo商城

    https://shopxo.net/ [问题1:配置邮箱注册]https://ask.shopxo.net/article/19

  10. outlook2016用Exchange轻松绑定腾讯企业邮箱

    系统版本:Win10 X64 1709 英文版 邮箱:Outlook2016 背景知识: 1.发送邮件均使用SMTP协议(SMTP 全称“Simple Mail Transfer Protocol”, ...