用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

微客吧 首页 教程 微信小程序 新手教程 查看内容

微信小程序半周开发问题总结

纸飞机 2018-3-6 16:12

作者:Yitim,来自原文地址 新产品要做一个微信,不想吐槽老板没给任何准备就给出了需求和原型图,好像默认小程序闭着眼睛就可以很顺利开发好。现在半周下来(五一结束开始到今天)完成了差不多所有的界面,网络请求 ...

作者:Yitim,来自

原文地址

新产品要做一个微信,不想吐槽老板没给任何准备就给出了需求和原型图,好像默认小程序闭着眼睛就可以很顺利开发好。现在半周下来(五一结束开始到今天)完成了差不多所有的界面,网络请求部分还跟服务端兄弟耗着:) 。总结下来小程序的开发速度肯定不会慢,门槛不高,缺点则在于限制非常多,并且其本质终究是换了毛皮的web开发,或多或少存在很多web app的通病,即使微信帮助提供了很多原生支持,这还是牺牲了很多开发自由度换来的。写本文的目的不在小程序开发的学习上,毕竟笔者一直都只听闻小程序大名,使用起来不过三四日,心得与教学谈不上,坑多少是踩了一些,下面主要还是列出目前遇到的一些问题点和吐槽。

1. 资源路径

之前出现过 开发工具中在wxss内定义元素的背景图background-image使用url('')路径时只能使用相对路径否则会找不到资源,但其实只有使用绝对路径'/'开头才能正确在手机上显示。

在页面的脚本中引入其他js脚本时只能使用相对路径。

2. 富文本需求

业务需要使用富文本的,目前找不到完美使用富文本的办法,只好改用截图来呈现。

3. 样式编辑

每个页面都有自己的wxss,用来编辑本页的样式,其中相当于,每个页面的底色以及底层尺寸都哦定义到page{}里就好。

并且目前用的尺寸单位都是rpx,这尺寸有点小,750rpx才等于iphone6的屏幕宽度。

view是个比较通用的标签,拿来代替div。

4. swiper组件
可以用来实现轮播图片组件。这个比较顺利因为不会有什么高级需求显示图片能滑动切换就足够
用来做支持左右滑动切换的界面时会有一些问题

  • swiper-item内部的滚动需要注意 普通的view标签小程序天然实现了safiri下的平滑滚动,但在swiper中则无效,手动给swiper-item加上 -webkit-overflow-scrolling: touch 且还必须加上overflow-y: auto
  • swiper有两种改变选项卡的方式,一是用手滑来滑去,二是动态更改current节点的值为需要滚动到的选项卡的索引
  • 选项卡更改流程为: 用手左右滑动,滑动结束后能触发更改事件,在这里可以执行新选项卡的数据渲染逻辑。
  • 手动点击某个切换按钮,触发选项卡切换,切换完成后也会触发更改事件。更改事件都是在切换动画完全结束才会触发,也就是说手一直拖着不放则不会触发。
  • 数据量比较多时至少开发工具上会有极大性能问题,卡到爆炸,手机端还好点,但是还是担忧,给wx:for渲染的节点再加个wx:key安慰一下自己。

5. 界面的事件交互

wxml里不能通过数据绑定来触发函数了,那界面要如何与脚本交互呢。微信给出的方案是通过其提供的很多个事件,包括bindtap,bindchange这些东西,这些事件节点传入自己定义的函数,在脚本中再从自带的event参数中获取本次事件触发的一系列参数。尴尬的事情就是不能很自由的绑定参数,全都得通过event参数来获取。比如界面上有一个节点:

绑定了makeOrder函数后并不能直接传入参数,只能在脚本中定义makeOrder函数时在其自带的参数中获取数据,获取的办法就是在节点上多加一个data-前缀的属性,此属性会被视为参数传递给这个事件回调。就像下图这样:

让我感觉自己在写jQuery。

6. scroll-view组件

至今没看懂真实完美用法。

只能感受到垂直方向的滑动,通过scroll-x或scroll-y节点决定是横向滚动还是纵向滚动,但目前的真实效果是scroll-x下并不能横向滚动,下级的每个view同时只会显示一个,并可以更改scroll-into-view节点来滚动到指定id的下级view中,这种场景下还算完美实用,相当于不支持手势滑动的纵向swiper。
scroll-y下滚动仍是纵向的,但是不再是只有一个view能被显示,而是所有view都能自由的滚上滚下,更改scroll-into-view则可以直接滚动到对应id的view,这种情况下这个组件也就很长的介绍网页会用用吧想不到其他合适的场景。
还有就是scroll-view下的overflow、height等属性也值得调整。

7. 数据绑定
有几个蛋疼的点。比如说很多节点比如wx:for这些里面绑定的数据也都必须使用{{}}包围,否则视为字符串。
比如说即使是{{}}包围了,也不能绑定函数,这直接导致数据在试图层面的格式化称为不可能的事情,想要格式化一个时间数据的话,就必须在js里遍历数据先格式化好时间字符串。。。这实在是不太舒服,可能是angular的pipe能力用爽习惯了。
数据的更新给出的方案是手动调用this.setData。。。虽说this.setData({'key1.key2', value})这样诡异的方式也可以,还是感觉自己在用jQuery,从无限DOM操作改为无限JS操作了。

8. 消息提示API

目前的消息提示框类型就只有一种,即使图标可以自定义,好歹把模拟安卓原生的Toast给提供了嘛。

鲜花
鲜花
握手
握手
雷人
雷人
路过
路过
鸡蛋
鸡蛋
分享至 : QQ空间
收藏