随着小程序的接口。公司在考虑到快速开发,果断决定开发小程序。总体而言,开发难度比较简单, 与流行的mvvm
类似,开发只专注数据层,不关注DOM
上手比较快。期间也踩了一些坑,记录了下来。
小程序的生命周期
路由注意事项
navigateTo
,redirectTo
只能打开非tabBar
页面。switchTab
只能打开tabBar
页面。reLaunch
可以打开任意页面。- 页面底部的
tabBar
由页面决定,即只要是定义为tabBar
的页面,底部都有tabBar
。 - 调用页面路由带的参数可以在目标页面的onLoad中获取。
wxss
- 单位:rpx
- 建议: 开发微信小程序时设计师可以用 iPhone6 作为视觉稿的标准。 注意: 在较小的屏幕上不可避免的会有一些毛刺,请在开发时尽量避免这种情况。
- 支持的选择器:id, class,element, element, element, ::after, ::before
运行机制
小程序没有重启的概念
当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是5分钟)会被微信主动销毁
置顶的小程序不会被微信主动销毁
当收到系统内存告警也会进行小程序的销毁
代码包限制
2M大小
及时清理没有使用到的代码和资源
目前小程序打包是会将工程下所有文件都打入代码包内,也就是说,这些没有被实际使用到的库文件和资源也会被打入到代码包里,从而影响到整体代码包的大小。
组件列表
视图容器
- view
- scroll-view
- swiper
基础内容
- icon
- text
- progress
表单
- button
- form
- input
- checkbox
- radio
- picker
- picker-view
- slider
- switch
- label
导航
- navigator
多媒体
- audio
- image
- video
客服
- contact-button
code 换取 session_key
这是一个 HTTPS 接口,开发者服务器使用登录凭证 code
获取 session_key
和 openid
。其中 session_key
是对用户数据进行加密签名的密钥。为了自身应用安全,session_key
不应该在网络上传输。
用户信息
调用wx.getUserInfo
获取userInfo
:
|
|
wx.chooseAddress
调起收货地址原生界面,并在编辑完成后返回选择的地址:
|
|
wx.login(OBJECT)
调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)。用户数据的加解密通讯需要依赖会话密钥完成。
wx.checkSession(OBJECT)
通过上述接口获得的用户登录态拥有一定的时效性。用户越久未使用小程序,用户登录态越有可能失效。反之如果用户一直在使用小程序,则用户登录态一直保持有效。具体时效逻辑由微信维护,对开发者透明。开发者只需要调用wx.checkSession
接口检测当前用户登录态是否有效。登录态过期后开发者可以再调用wx.login
获取新的用户登录态。
wx.requestPayment(OBJECT)
|
|
后端模板下发过程:
1.用AppID
,secret
调用接口获取access_token
2.调用接口发送模板消息, POST的参数如下:
|
|
wx.navigateTo无法打开页面
一个应用同时只能打开5个页面,当已经打开了5个页面之后,wx.navigateTo不能正常打开新页面。请避免多层级的交互方式,或者使用wx.redirectTo
字体规范
微信内字体的使用与所运行的系统字体保持一致,常用字号为20, 18, 17, 16,14 13, 11(pt),使用场景具体如下:
工作中问题总结
展开符号...
只能用于数组,暂时不能用于对象
target 与 currentTarget
- target: 触发事件的源组件
- currentTarget: 事件绑定的当前组件。
setData() 参数格式
setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。
接受一个对象,以 key,value 的形式表示将 this.data 中的 key 对应的值改变成 value。
其中 key 可以非常灵活,以数据路径的形式给出,如 array[2].message,a.b.c.d,并且不需要在 this.data 中预先定义。
注意:
- 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致
- 仅支持设置可 JSON 化的数据
- 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
- 请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。
示例代码:
|
|
onLoad 与 onShow
- onLoad: 一个页面只会调用一次,可以在 onLoad 中获取打开当前页面所调用的 query 参数。(注意一个路由query不一样,认为是两个页面,onLoad也会调用)
- onShow: 每次打开页面都会调用一次