什么是小程序
微信创始人张小龙说:小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫后者搜一下即可打开应用。也提现了“用完即走”的理念,用户不用关系是否安装太多应用的问题。应用将无处不在,随时可用,担又无需安装卸载。
了解小程序
相关文档
分为服务号、订阅号、小程序三大账号体系。其中服务号是给企业和组织提供更强大的业务服务与用户管理能力,帮助企业快速实现全新的公众号服务平台。订阅号是为媒体和个人提供一种新的信息传播方式,构建与读者之间更好的沟通与管理模式。小程序是一种新开放能力,可以在微信内被便捷地获取和传播,同时具有出色的使用体验。
开发准备
代码构成
- json 后缀的 JSON 配置文件
- wxml 后缀的 WXML 模板文件
- wxss 后缀的 WXSS 样式文件
- js 后缀的 JS 脚本逻辑文件
json配置文件
app.json
1 | { |
index.json
1 | { |
WXML 模板文件
index.wxml
1 | <view class="container"> |
WXSS 样式文件
1 | .userinfo { |
JS 脚本逻辑文件
1 | //index.js |
生命周期
应用生命周期
属性 | 类型 | 描述 | 触发时机 |
---|---|---|---|
onLaunch | Function | 生命周期函数–监听小程序初始化 | 当小程序初始化完成时,会触发 onLaunch(全局只触发一次) |
onShow | Function | 生命周期函数–监听小程序显示 | 当小程序启动,或从后台进入前台显示,会触发 onShow |
onHide | Function | 生命周期函数–监听小程序隐藏 | 当小程序从前台进入后台,会触发 onHide |
onError | Function | 错误监听函数 | 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息 |
onPageNotFound | Function | 页面不存在监听函数 | 当小程序出现要打开的页面不存在的情况,会带上页面信息回调该函数,详见下文 |
其他 | Any | 开发者可以添加任意的函数或数据到 | Object 参数中,用 this 可以访问 |
页面生命周期、初始数据、事件处理函数
属性 | 类型 | 描述 |
---|---|---|
data | Object | 页面的初始数据 |
onLoad | Function | 生命周期函数–监听页面加载 |
onReady | Function | 生命周期函数–监听页面初次渲染完成 |
onShow | Function | 生命周期函数–监听页面显示 |
onHide | Function | 生命周期函数–监听页面隐藏 |
onUnload | Function | 生命周期函数–监听页面卸载 |
onPullDownRefresh | Function | 页面相关事件处理函数–监听用户下拉动作 |
onReachBottom | Function | 页面上拉触底事件的处理函数 |
onShareAppMessage | Function | 用户点击右上角转发 |
onPageScroll | Function | 页面滚动触发事件的处理函数 |
onTabItemTap | Function | 当前是 tab 页时,点击 tab 时触发 |
其他 | Any | 开发者可以添加任意的函数或数据到 object 参数中,在页面的函数中用 this 可以访问 |
路由相关
路由方式 | 触发时机 | 路由前页面 | 路由后页面 |
---|---|---|---|
初始化 | 小程序打开的第一个页面 | onLoad, onShow | |
打开新页面 | 调用 API wx.navigateTo 或使用navigator组件 | onHide | onLoad, onShow |
页面重定向 | 调用 API wx.redirectTo 或使用navigator组件 | onUnload | onLoad, onShow |
页面返回 | 调用 API wx.navigateBack 或使用navigator组件 | 或用户按左上角返回按钮 onUnload | onShow |
Tab 切换 | 调用 API wx.switchTab 或使用navigator组件 | 或用户切换 Tab | 各种情况请参考下表 |
重启动 | 调用 API wx.reLaunch 或使用navigator组件 | onUnload | onLoad, onShow |
1 | <navigator open-type="navigateTo"/> |
基本语法
数据绑定
数据绑定使用 Mustache 语法(双大括号)将变量包起来。
1 | <view> {{ message }} </view> |
1 | Page({ |
三元运算
1 | <view hidden="{{flag ? true : false}}"> Hidden </view> |
算数运算
1 | <view> {{a + b}} + {{c}} + d </view> |
1 | Page({ |
逻辑判断
1 | <view wx:if="{{length > 5}}"> </view> |
列表渲染
1 | <view wx:for="{{array}}"> |
1 | Page({ |
使用 wx:for-item 可以指定数组当前元素的变量名,
使用 wx:for-index 可以指定数组当前下标的变量名:
条件渲染
在框架中,使用 wx:if=”“ 来判断是否需要渲染该代码块:
1 | <view wx:if="{{condition}}"> True </view> |
也可以用 wx:elif 和 wx:else 来添加一个 else 块:
1 | <view wx:if="{{length > 5}}"> 1 </view> |
因为 wx:if 是一个控制属性,需要将它添加到一个标签上。如果要一次性判断多个组件标签,可以使用一个
1 | <block wx:if="{{true}}"> |
事件处理
- 事件是视图层到逻辑层的通讯方式。
- 事件可以将用户的行为反馈到逻辑层进行处理。
- 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。
- 事件对象可以携带额外信息,如 id, dataset, touches。
如bindtap,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。
1 | <view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view> |
在相应的Page定义中写上相应的事件处理函数,参数是event。
1 | Page({ |
可以看到log出来的信息大致如下:
1 | { |
引用
import可以在该文件中使用目标文件定义的template,如:
在 item.wxml 中定义了一个叫item的template:
1 | <!-- item.wxml --> |
在 index.wxml 中引用了 item.wxml,就可以使用item模板:
1 | <import src="item.wxml"/> |
WXS 模块
每一个 .wxs 文件和
每个模块都有自己独立的作用域。即在一个模块里面定义的变量与函数,默认为私有的,对其他模块不可见。
一个模块要想对外暴露其内部的私有变量与函数,只能通过 module.exports 实现。
1 | // /pages/tools.wxs |
1 | <wxs src="./../tools.wxs" module="tools" /> |
页面输出:
1 | some msg |
自定义组件
js配置文件
1 | { |
wxml布局文件编写
1 | <view class='wx-dialog-container' hidden="{{!isShow}}"> |
wxss样式文件
1 | .wx-mask { |
js核心文件
1 | Component({ |