四种文件格式:
.js js操作
至少要写Page({}),用于注册一个页面
.json 一些基础设定
至少要一个{}
均需使用双引号, 且不能有注释,不能有多余的逗号
project.config.json 用于IDE的个性化配置
.wxml 代替html
推荐采用弹性盒模型
bind(冒泡阶段)和catch(捕获阶段)都能绑定事件
.wxss 代替css
新单位:rpx 规定屏幕为750rpx
- 当前支持的选择器:
.class #id element
element, element
::after ::before
小程序的启动
- 客户端下载小程序到本地
- app.js中的onLaunch事件回调
- 加载app.json中pages的第一条作为初始页面,根据其.json文件生成界面
- 依次装载WXML和WXSS,最后加载.js文件并渲染data,完成后触发onLoad的回调
App()参数设置
- onLaunch
- onShow 当小程序启动,或从后台进入前台时显示
- onHide
- onError 发生脚本错误或 api 调用失败时,会触发并带上错误信息
- onPageNotFound 当要打开的页面并不存在时
- 其他自定义函数/数据
在App函数内用this获取实例,在外部可通过getApp()获取
数据渲染
数据绑定 {{}}
- 所有数据都必须通过{{}}绑定,花括号和引号之间如果有空格,会被解析为字符串
列表渲染 wx:for
- 绑定一个数组,默认当前项的下标名为 index,变量名为 item
- 通过wx:for-index和wx:for-item可改变下标和变量名
- 当 wx:for 的值为字符串时,会将字符串解析成字符串数组
wx:key
数组动态变化时,如果希望项目保持自己的特征和状态,(如 <input/> 的内容),需要指定唯一标识符。存在key的项目只会重新排序,没有key的项目会被重新创建
- wx:key 的值以两种形式提供
1.字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。
2.保留关键字 *this ,代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字
条件渲染 wx:if
可使用包装元素<block/>同时包含多个元素 ,block不会在页面中做任何渲染,只接受wx:for和wx:if这样的控制属性。
wx:if vs hidden
- 当 wx:if 的条件值切换时,框架有一个局部渲染的过程,确保条件块在切换时销毁或重新渲染
- hidden 组件始终会被渲染,只是简单的控制显示与隐藏
因此频繁切换时使用hidden,否则使用wx:if
Page
Page的跳转
- 通过wx.navigateTo跳转,只能打开非 tabBar 页面。
- 当前页面onHide,后页面onLoad和onShow
- 通过wx.redirectTo跳转,只能打开非 tabBar 页面。
- 当前页面onUnload,后页面onLoad和onShow
- 通过wx.navigateBack返回页面栈内页面。
- 当前页面onUnload,后页面onShow
- 可以通过getCurrentPages()获取页面栈
- 通过wx.switchTab进入,只能打开 tabBar 页面。
- 所有非 tabBar 页面onUnload
- 通过wx.reLaunch进入,可以打开任意页面。
- 所有已有页面onUnload,后页面onLoad和onShow
Page的生命周期
- onLoad
可获取打开当前页面所调用的 query 参数- onReady
对界面的设置如wx.setNavigationBarTitle应在onReady后设置- onShow
每次进入该页面都会触发一次- onHide
当navigateTo或底部tab切换时调用。- onUnload
事件处理函数
- onPullDownRefresh 监听下拉
需要在json中配置enablePullDownRefresh为true
- onReachBottom 监听上拉触底
可在json中配置onReachBottomDistance,表示触发时距页面底部距离,单位px,默认为50
- onShareAppMessage 设置转发内容,页面内有该函数时才允许转发
- onPageScroll 页面滚动触发事件的处理函数
- onTabItemTap 当前是 tab 页时,点击 tab 时触发
自定义事件处理函数(冒号可省略)
bind:tap="go" ( 在冒泡阶段触发 )
catch:tap="go" ( 在冒泡阶段触发,并阻止继续冒泡 )
capture-bind:tap="go" ( 在捕获阶段触发 )
capture-catch:tap="go" ( 在捕获阶段触发,并阻止捕获和冒泡 )
无法直接传参,仅能获取一个时间对象,可通过设置date-*属性,并在event.target.dataset中获取
- touchstart
- touchmove
- touchcancel 触摸被弹窗,来电提醒等打断
- touchend
- tap 手指触摸后马上离开
- longpress 长按(350ms以上),会覆盖tap
- transitionend 在 WXSS transition 或 wx.createAnimation 动画结束后触发
- animationstart 在 WXSS animation 动画开始时触发
- animationiteration 在 WXSS animation 一次迭代结束时触发
- animationend 在 WXSS animation 动画完成时触发
Page.prototype.route
获取当前路由
Page.prototype.setData(data,callback?)
将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)
data单次设置的数据不能超过1024kB,且不能有值为undefined
callback会在视图层渲染完成之后触发