小程序 wepy开发总结

96
贝尔微微
2017.06.20 22:06* 字数 1635

基础信息

微信小程序基础库版本: 1.2.2
wepy版本: ^1.5.5

遇到问题

循环体中使用组件

1、props传值子组件

循环中给子组件传递props时,在子组件的模板中,props可以正常显示,在js中取到的是循环列表当前的item变量,很神奇。

2、模板数据显示和操作不同步

循环列表中引用组件,当循环体(数组)list变更时,模板和对应的list数据对象更新不同步:这种情况,页面上显示的数据会及时更新,但是appData树中的list对象并未更新,如果组件上对应了数据操作,就相当于在上一个list数组中对应的index对象中进行。
例子:
解决办法: 循环体中存在有交互功能组件时,请不要用这个版本wepy的组件功能,用原生的循环。在wepy未解决此问题前,可以把当前的循环指针index传递给子组件上绑定的事件处理函数,在index取得循环体中对应需要操作的数据对象。

3、跨组件传值

一个页面镶嵌了超过两层 如:页面a > 组件b > 组件c,如果想在页面a中向组件c动态传值,在开发者工具中可以正常传递,在真正的微信环境中确没有办法使用
解决办法:不使用组件

页面重载及数据更新

1、onshow 和 onload

当第一次打开页面时,会同时触发onShowonLoad,需要注意根据需求在相应的函数中做初始化。
且建议在这些函数中将数据绑定的变量做一次初始化。因为在页面被重启时,理论上讲所有的数据都会被初始化,但是在小程序中碰到了当前页面通过某种跳转方式被关闭了,再进入此页面时,页面上的数据会重复。猜想可能微信中模板数据会有缓存。在页面中特别存在循环列表的页面,建议在页面业务逻辑最开始做一次初始化。

2、 带参数的模板页面

根据参数更新页面的模板页(如商品详情页),参数变更进入页面,会触发onload事件,从性能和用户考虑,那些需要在onshow中做初始化或者更新操作应该方法onload中来,因为从后台进入页面时,大部分情况是不需要对页面进行变更的。

3、无网络的错误处理

无网络情况下,不会放送请求,所以页面初始化请求后需要展示数据的情况下,如果页面存在绑定过的数据对象(页面之前请求过,且页面离开后并未被清除),页面会使用旧的数据对象,如果是模板页(如商品详情)请在请求数据之前,将数据初始化

移动端兼容性问题

1、 showToast 提示框不出现的问题

在iphone7(更多ios机型有待观察)中,页面请求同时存在加载框和toast提示框时(场景:当加载完成时,需要提示结果信息)toast提示框会不显示。

解决办法:用setTimeout延时500毫秒即可正常显示

2、多行省略

使用web-kit多行属性省略时,超出行数的文字仍会出现。即使在设置了设置超出隐藏,blockHeight = lineHeight * lineNum - lineHeight/2,在某些尺寸的手机上仍会出现问题,刚开始怀疑是rpx的问题,但是改用px也会出现同样的问题,暂时还没有找到解决办法

开发总结及感想

小程开发的优势和问题都很明显。

完整性和灵活性

小程序用了目前基本流行的mvvm模式,他自己身封装了常用的组件和api,基本不需要其他第三方框架,就可以完成日常的开发需求,从登录到提示框,调用系统的基本控件, 所以开发的时候基本只需考虑业务范围,也算比较省时省力。
不过这种完整性是为了微信一直以来推崇的封闭性服务的,所以在自由度,灵活性,定制化方面也存在很大问题。比如微信小程序自带的容提示框,可选图标就两种,大小位置填充都没有办法去修改,所以遇到一些特殊化的场景或需求时,是很难完成的。

兼容性

虽然小程序自身存在不少坑,但起码开发小程序解决了一个在其他端的很重要的一个问题:兼容性问题!
小程序作为一个代替浏览器的平台容器,至少在纷乱的机型中做到了平台级的统一。其他的兼容性问题,可能就跟安卓、和苹果系统差异,还有低版本机型的浏览器兼容性问题,这个就得看微信小程序自身针对低版本机型和系统差异做的功课了。不过,这个兼容性的问题比h5开发会小很多。
一个比较直接的体验就是 可以在小程序中使用flex布局,这酸爽,简直无法想象!
但是小程序载体或着html组件自身出现了bug就很难处理,可以说很难直接找到现成的解决方案,只有靠猜或试。

没有组件化

wepy的组件化开发是亮点,但是存在bug,现在wepy最大的用处对我来说可能就是写单文件的舒适感。
微信小程序本身不支持组件化,最多只支持模板化!还是期待微信能在组件化开发前进一大步。

微信小程序文档
小程序框架wepy文档

web
Web note ad 1