1.简言

为期一个半月的小程序开发,其中夹杂其他项目的功能迭代,跌跌撞撞的将项目完成了,今天中秋节放假前一天,以此来记录下此次打怪升级的心得与分享其中遇到花费时间的问题。

因为此次开发的是一个类电商项目,从先发布一个上线一个招募页招募用户,在开发文章页面,文章详情,商品详情,sku联动,创建订单,绑定银行卡,创建customer,购买支付,订单列表(全部,未付款,已发货,已收货),订单详情,物流详情,用户信息,地址管理,成立团队,分享与发布到朋友圈推广等。不想原生小程序的结构目录复杂,数据绑定不方便,唯一的好处只用踩官方小程序的坑,所以考虑使用美团的mpvue,查找文档可以使用在mpve的基础上更接近vue风格开发,不用写个vue页面还要在写个main.js配置小程序json配置,路由和配置写在一起,并且帮你做了flyio和拦截器的封装和常用方法的封装,可以根据你的业务架构在此基础上更改你的框架。使用下图的倒数第二个,传送门:mpvue-cli (感谢spencer1994对社区做出的贡献)

2.将在mpvue-simple-cli的基础上更改自己的业务结构,封装自己的方法和组件,添加自己的常量与封装方法。

将自己项目分享,只有简单的三个test页面demo,没有一点业务代码,封装的方法有些保留,可以分享,UI使用有赞mpvue-zanu,感兴趣可以简单看一下,希望对你有一些帮助,本人只是一个工作不久的小白,写的代码有点kou jiao,望见谅。

项目地址:mpvue-project

3.记录下在开发中遇到的坑吧以及解决办法,小问题不做记录,希望有遇到同样问题的小伙伴能及时解决,或者有更赞的方法希望给我指正。

1.mpvue生命周期问题以及小程序生命周期,mpveue created每个页面都会加载一次,其余方法只会进来执行一次,如果需要更新页面可以使用小程序的onShow。

2.tabBar只能使用本地图片,不能使用网络图片,建议81px x 81px,跳转到带tabBar对应的页面只能使用wx.switchTab,并且不能传参数,可以使用vuex,如登录状态。

3.改版后使用wx.getUserInfo()不再弹出授权弹窗,使用wx.getSetting,成功回调里判断是否授权过用户信息 。可以使用button组件弹出授权弹窗。

<button open-type="getUserInfo" lang="zh_CN" @getuserinfo="onGotUserInfo" class="fun-btn">使用微信登录</button>

4.同一路由切换,会保留上一个页面的数据,如这个issue(https://github.com/Meituan-Dianping/mpvue/issues/140),可以在加载时使用下面方法,先将数据恢复为默认数据。

onLoad (options){
Object.assign(this, this.$options.data()) // 解决相同保留上一个页面的数据 (https://github.com/Meituan-Dianping/mpvue/issues/300)
}

5.手机线上video在ios上黑屏或赚菊花,安卓正常。看到社区上记录了关于所有小程序video的问题(https://developers.weixin.qq.com/community/develop/doc/0006e2923d09c0fc88d6aea965b800),也没有发现有人给出解决方法,经过调查时因为七牛云的路径中带中文,因此admin后台上传视频不要有中文,微信api下载图片路径也不能有中文,否则也下载不了,会有转码问题。

6.在写遮罩层和弹出框会出现触摸穿透和滚动穿透,可以使用touchMove.stop和touchend.stop

<scroll-view :scroll-y="hideModal"  @touchmove.stop="moveStop" >
//滚动内容 hideModal是否弹出弹出框
</scroll-view>
<!-- 底部弹出框 -->
<div class="modals" v-if="!hideModal" @touchmove.stop="moveStop" @touchend.stop="moveStop">

7.分享到朋友圈,微信小程序不提供api,只能通过canvas然后在保存图片到手机,可以使用wx.getSystemInfo获取设备信息,根据宽高来自使用,因为手机dpi不同,因为可能不止画一张图片,如果使用wx.getImageInfo嵌套的话会一个一个请求依次进行,导出加载慢白屏时间多,因此只有将微信小程序api promise化异步加载,网上有人说使用bluebird,发现在mpvue会报如下错误,因此业内推荐使用es6-promise,并且使体积更小。

 import Promise from 'es6-promise' // 业内推荐使用es6-promise (bluebird会报错,并且es6-promise比bluebird体积小三倍)

const wxGetImageInfo = this.wxPromisify(wx.getImageInfo)

fly.all([
wxGetImageInfo({
src: 'https://xxxx.png'
}),
wxGetImageInfo({
src: 'https://xxxxxx.jpeg'
}),
wxGetImageInfo({
src: 'https://xxxx.jpg'
})
]).then(function (res) {}) wxPromisify(fn) {
return function (obj = {}) {
return new Promise((resolve, reject) => {
obj.success = function (res) {
resolve(res)
} obj.fail = function (res) {
reject(res)
} fn(obj)
})
}
},

8.分享到朋友圈,生成二维码,只能是线上发布程序,并且A与C方案有10万条限制,可以使用B方案。

9.在mpvue封装vue组件的时候不推荐将要双向绑定的input封装到组件中,我试过很多办法,虽然解决了父子组件间双向绑定通讯问题,但一直解决不了光标闪烁问题,影响体验,花了一定时间之后没有再尝试解决,就没有封装Input到其中。

10.注意小程序页面跳转的几个方法,注意栈的问题,使用wx.navigateTo和wx.redirecTo会有页面计入栈,虽然可以传参数更新页面,但是支付成功后到订单详情返回后会到下单页面,希望到购买商品页面,如美团外卖逻辑,因此在选择地址后使用wx.navigateBack,但是返回到上一页面又不能添加参数更细地址,因此使用eventBus解决地址数据更新,选择地址页面使用event.emit(''AddressDataChanged,address),

下单页面监听事件,更改数据,event.on('AddressDataChanged',this, function(newAddress){})

// event.js(eventBus)
let events = {} function on(name, self, callback) {
var tuple = [self, callback]
var callbacks = events[name]
if (Array.isArray(callbacks)) {
callbacks.push(tuple)
} else {
events[name] = [tuple]
}
} function remove(name, self) {
var callbacks = events[name]
if (Array.isArray(callbacks)) {
events[name] = callbacks.filter((tuple) => {
return tuple[0] !== self
})
}
} function emit(name, data) {
var callbacks = events[name]
if (Array.isArray(callbacks)) {
callbacks.map((tuple) => {
var self = tuple[0]
var callback = tuple[1]
callback.call(self, data)
})
}
} exports.on = on
exports.remove = remove
exports.emit = emit

10. mapvideocanvascameralive-playerlive-pusher等组件index问题,可以使用cover-view

11.其中a9cdn-replacer.js与a9cdn-uploader.js 是我们老大写的一键将图片hash值并且上传到七牛云,需要配置,具体参考github:七牛云图片上传

 

-----原创文章,©版权所有,转载请注明标明出处:http://www.cnblogs.com/doinbean

  

mpvue开发项目总结(从0到上线)的更多相关文章

  1. mpvue开发小程序项目遇到的问题

    mpvue项目 最近用mpvue开发了一个家庭私人医生签约的小程序项目.记录总结一下,开发过程中遇到的一些问题. 关于页面进栈出栈的状态值问题 页面进出栈,会触发onLoad/unLoad事件.出栈不 ...

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

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

  3. 使用mpvue开发github小程序总结

    前言 最近有点闲,想起关注已久的mpvue写小程序,所以稍微肝了半个多月写了个github版的微信小程序,已上线.现在总结一下遇到的坑. 扫码体验. 项目地址.https://github.com/c ...

  4. 记一次SAP新业务开发项目

    直到笔者写这篇博文的时候,这个开发项目名义上已经上线,但其实开发以及优化的工作还在继续,数据的修复也仍在继续... IT系统环境很简单,一个基于JAVA+Mysql的Web平台,一个是宇宙第一的SAP ...

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

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

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

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

  7. 使用mpvue开发小程序

    前言: 最近接到小程序的开发需求,由于之前也没开发过小程序,心情还是有点激动.先花15分钟看一遍小程序官方文档,再花10分钟看一遍mpvue官方文档,然后拿着原型图和UI图就开干.踩了不少坑,写篇博客 ...

  8. mpvue开发微信小程序

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

  9. CODING 项目协同 2.0 —— 让协作有条不紊

    本文为 CODING 高级产品经理王海明 在腾讯云 CIF 工程效能峰会上所做的分享.文末可前往峰会官网,观看回放并下载 PPT. 大家好,我是 CODING 高级产品经理王海明,今天与大家分享的是项 ...

随机推荐

  1. SV-assertion

    断言(assert)是一种描述性语言,通过描述的期望结果来进行仿真验证. 断言有一个更加基础的信息,我们称为属性(property),属性可以作为断言结果,功能覆盖点,形式检查和约束随机激励生成. 断 ...

  2. 【论文速读】Dan_Deng_AAAI2018_PixelLink_Detecting_Scene_Text_via_Instance_Segmentation

    Dan Deng--[AAAI2018]PixelLink_Detecting Scene Text via Instance Segmentation 作者和代码 tensorflow代码 关键词 ...

  3. highcharts 大数据 String+,StringBuilder,String.format运行效率比较

    实现String字符串相加的方法有很多,常见的有直接相加,StringBuilder.append和String.format,这三者的运行效率是有差异的,String是final类型的,每次相加都会 ...

  4. vue使用v-for时vscode报错 Elements in iteration expect to have 'v-bind:key' directives

    vue使用v-for时vscode报错 Elements in iteration expect to have 'v-bind:key' directives Vue 2.2.0+的版本里,当在组件 ...

  5. C#发送内置图片的html格式邮件的代码

    将写内容过程经常用的内容段备份一次,下面的内容是关于C#发送内置图片的html格式邮件的内容,应该对码农们也有用处.MailMessage m = new MailMessage();m.Subjec ...

  6. cnetos7设置中文显示及中文输入法

    Centos7安装的时候即使选择了中文安装,因为安装后并没有GUI,即使后来安装GUI后默认依旧是英文显示. 输入locale后显示的是 永久修改成中文:编辑/etc/profile.d/lang.s ...

  7. 怎么批量删除qq空间说说

    1.打开自己的QQ空间 - 说说——右击说说审查元素,打开审查元素.或者直接按f12也可以. 2.在这里我们看到很多分类 3.点击 Console,进入Console项 4.粘贴删除说说的代码,代码为 ...

  8. 'scope' is defined but never used

    错误如下: 解决办法: 1.scope这个属性在最新版本vue已经被弃用,升级成slot-scope了 ,所以属性名应该改为slot-scope. 2.如上所示,我们发现,还是有报错,原因是vetur ...

  9. 牛客OI周赛7-提高组 A 小睿睿的等式

    链接:https://ac.nowcoder.com/acm/contest/371/A来源:牛客网 小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n ...

  10. python中的列表

    1.  列表是什么,他可以用来做什么呢?当你存在这样的疑问,就往下看吧:) 列表是由一系列按特定顺序排列的元素组成的.在Python中,用[]来表示列表,并用逗号来分隔其中的元素. 我们可以创建包含字 ...