微信小程序开发总结
这几个月公司的小程序开发工作落在了我们身上,紧锣密鼓的开发完毕之后,有必要总结一些开发过程中的坑和一些奇怪的解决办法。
一个小程序页面包括以下几个部分
page
├── page.wxml
├── page.js
├── page.json
└── page.wxss
└── (utils.wxs)
其中wxs不必须,位置也可以随意放置,跟随全局或页面均可。下面会按照不同坑位解释。
WXML
WXML(WeiXin Markup Language),用于描述页面结构,基本上可以理解成网页的HTML,不过添加了一些不同的标记比如view、image
等。
比较显著的特征是支持模板函数(使用Mustache标记)和模板、引用(import
)、事件绑定、列表渲染和条件渲染。
对于{{}}
标记,括号内容可以是:js
定义的data
对象,逻辑运算符(算术运算、三目运算、逻辑判断)和字符串拼接。
坑1:小程序的{{}}
里,不能使用js
内定义的function
,如果使用了,没有任何效果,也不会出报错信息。和react
或者vue
表现都不一样,这一点刚开始用,是比较蛋疼的。
坑2:大多数情况下,直接写wx:if="{{condition}}"
还是挺爽的,虽然写true/false
要加大括号容易遗漏,不过大多数情况下,写大括号总没错的。但是当写到循环时,就发现事情不太对了:wx:for-index="index"、wx:for-item="item"
,大括号不见了。所以,你写出的代码可能是这样:
{{idx}}: {{itemName.message}}
真的很容易就会遗漏或者多写大括号。
坑3:事件绑定触发问题。
对于触摸事件,常用的有3种:tap、longtap、longpress
。其中tap
和longtap
看起来天然是一对,但是实际使用的时候,发现longtap
触发完之后会自动再触发tap
(真是天生一对?),何以解忧?唯有加锁。
longpress做为实际补丁的存在,需要指定事件回调才能避免tap被触发。
wxss
wxss
没什么内容,开发者工具里只能直接写css
,也不支持sass
、less
等。可以通过gulp
等迂回战术,在其他IDE里编辑,直接生成wxss代码再从开发工具打开(实时刷新)。
wxs
WXS(WeiXin Script)是小程序的一套脚本语言,注意是小程序的脚本语言,它和JavaScript
并不完全一致,并且不能调用主程序js文件里的函数,也不能调用小程序的api
。
那么,这样一个看着奇怪,用着更奇怪的东西,有什么应用场景呢?
场景1:需要动态获取标题,并且标题个别字段需要高亮,需要高亮的字段接口已经用{}
标识出来。
注意小程序wxml
里的数据绑定不支持函数,所以如果直接写js
,只能写一系列data
,设定不同的标志位,然后页面里调用。
如果使用wxs,就能直接在页面里使用函数
{{utils.headerColorHandler(headerMsg)}}
场景2:手机格式检查。
坑:wxs
虽然定义为一套脚本语言,但是对于js的很多基础特性支持不完整,大概是es5
,反观小程序主js
文件是es6
,坑不坑?而且许多函数还是阉割版的,比如只支持部分正则表达式,常见的匹配全部msg.replace(/a/g, 'xxx')
,编译失败。
而官方文档里,遍地都是
说好的“wxs 与 javascript 是不同的语言,有自己的语法”呢?给个不支持特性列表是不是更一目了然呢?
分享
微信小程序设计上,分享部分为了保持可控,也使用了专门函数包装。和微信分享的函数类似,需要指定图片、描述、跳转地址。这里的跳转地址,只能是/pages/a或/pages/b这种内部链接。所以即使有web页面,也要在小程序里套壳才能用。但是,通常维护web页面要比维护小程序轻量和灵活的多,很多时候为使各端app保持一直,都使用web页面内嵌。
所以,需要在小程序内和web页面里都支持小程序分享,形成一个闭环。(当然,从web页直接跳app也可以)
分享示意图
对于一统Android
和iOS
,小程序的确功不可没。
总结
zww大叔之前总结过一篇 微信小程序的一些小坑、小方法,有需要的同学请传送。
得益于很小的体积(官方规定压缩后1M以内),用户可以无痛使用,而且删除也不用犹豫。
加上微信的统一认证方式,也免去了手机验证码的麻烦。
目前问题很多,作为开发者,我们……当然选择原谅他啊!
特别多坑,开发文档就是个笑话,而且时不时改组件、改规定,加上很多类别的内容需要各种资质证(申请需要很长时间影响开发进度)烦死了。反正国内环境+垄断封闭的东西它是爷你们都是孙子(持续开发一个公司小程序1年积累的怨念就发你这了…)
@zwwooooo 嗯,很多地方还需要自己模拟,但是整体是向更可用的方向发展。
审核这个是真麻烦,不说小程序,单是想获取认证信息就一大堆限制。
至于其他,受众这么多,就算再难用也得忍啊~
@axiu 有问题,一定有他的原因。
@axiu 前段时间他们增加了不能主动引导用户分享朋友圈,每次不同的审核人员会有不同的结果——页面有好多地方是有“朋友圈”字眼——因为懒,所以没去一个一个页面检查——主要是觉得“引导用户分享也不行”真是奇葩
@zwwooooo 小程序之前不是只能分享好友,不能分享朋友圈吗?去瞅瞅。。
这种有可能复用的功能提个组件比较好控制,不然改起来太蛋疼。
谢谢分享,小程序真的很难诶
厉害了。。现在都用什么框架啊
文章不错非常喜欢
今年的小程序应该会比较火,因为都在做。
实战文,谢谢分享
现在很多差劲的小程序毫无体验感
谷歌seo优化
隐藏的坑还有不少