指南
小程序知识结构
重要概念
开发者管理后台
AppId
后台管理权限设计
openId
access_token
场景码
wx
小程序生命周期
页面生命周期
组件生命周期
渲染线程和逻辑线程的通信 以及适用场景
事件系统和event对象
eventBus
冷启动 和 热启动
dataset
组件中的properties和data的区别
wx:if VS hidden
一般来说,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好,如果在运行时条件不大可能改变则 wx:if 较好。
WXML中import VS include
常用能力
账号体系??-待补充
组件通信
组件生命周期
组件本身的生命周期
Component({
lifetimes: {
// 推荐使用lifetimes作为Component一级参数
created: function() {
/**
* 1. 此时组件刚被创建好
* 2. this.data 此时是Component 构造器中定义的数据 data
* 2. 此时还不能调用 setData
* 3. 一般用途:只应该用于给组件 this 添加一些自定义属性字段。
*/
},
attached: function() {
/**
1. 在组件实例进入页面节点树时执行
2. this.data 已被初始化为组件的当前值
3. 绝大多数初始化工作可以在这个时机进行
*/
},
detached: function() {
/**
1. 在组件实例被从页面节点树移除时执行
2. 退出一个页面时,如果组件还在页面节点树中,则 detached 会被触发。
*/
},
},
组件所在页面的生命周期
Component({
// 通过pageLifetimes来感知并注册逻辑到父页面的生命周期中
pageLifetimes: {
show: function() {
// 页面被展示
},
hide: function() {
// 页面被隐藏
},
resize: function(size) {
// 页面尺寸变化
}
}
})
自定义TabBar
待分类
- 渲染层的界面使用了**WebView **进行渲染;逻辑层采用JsCore线程运行JS脚本;
- 也就是视图还是用webview渲染出来的,和hybrid App一个技术
- WXS 运行在视图层(Webview),里面的逻辑毕竟能做的事件比较少,需要有一个机制和逻辑层(App Service)开发者的代码通信,
- 用于双向绑定的表达式有如下限制:
- 只能是一个单一字段的绑定
<input model:value="值为 {{value}}" />
<input model:value="{{ a + b }}" />
- 目前,尚不能 data 路径,下面这种表达式目前暂不支持。
<input model:value="{{ a.b }}" />
app-service
- 逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。
- 开发者写的所有代码最终将会打包成一份
JavaScript文件,并在小程序启动的时候运行,直到小程序销毁。这一行为类似 ServiceWorker,所以逻辑层也称之为 App Service。(打包出的这一份js文件,就是我们一般看到的appService.js,也就是它为构建后的产物)
- 开发者写的所有代码最终将会打包成一份
- 整个小程序只有一个 App 实例,是全部页面共享的。开发者可以通过
getApp方法获取到全局唯一的 App 实例,获取App上的数据或调用开发者注册在App上的函数。
const appInstance = getApp()
console.log(appInstance.globalData) // I am global data
- 页面有2个运行场景:
- 前台
- 后台
- behaviors: 很像mixin的一个东西,共享一部分代码
- 这里要发布的 npm 包是特指专为小程序定制的 npm 包(下称小程序 npm 包)
- 启用初始渲染缓存,可以使视图层不需要等待逻辑层初始化完毕,而直接提前将页面初始 data 的渲染结果展示给用户,这可以使得页面对用户可见的时间大大提前
- 优化方案-初始化缓存
- 因为 WXML 节点标签名只能是小写字母、中划线和下划线的组合,所以自定义组件的标签名也只能包含这些字符。
- 页面本质上也是组件。可以用组件构造器Component来构造,url参数则可以通过属性访问到
- 插件本质上,是跨小程序的可以复用的功能体。不同的小程序可以使用同一插件,插件本身就是一个类小程序项目。
- 思考:我们可以把一些小程序完整的功能做成插件复用出来,并单独管理:例如:支付插件,
- 以后的复用粒度:组件化、插件化
- 插件接入流程
- 小程序中请求必须使用https
- 在微信开发者工具中,可以临时开启
开发环境不校验请求域名、TLS版本及HTTPS证书选项,跳过服务器域名的校验。此时,在微信开发者工具中及手机开启调试模式时,不会进行服务器域名的校验。 - 在服务器域名配置成功后,建议开发者关闭此选项进行开发,并在各平台下进行测试,以确认服务器域名配置正确。
命令行工具
behiviors
同名字段的覆盖和组合规则
组件和它引用的 behavior 中可以包含同名的字段,对这些字段的处理方法如下:
- 如果有同名的属性 (properties) 或方法 (methods):
- 若组件本身有这个属性或方法,则组件的属性或方法会覆盖
behavior中的同名属性或方法; - 若组件本身无这个属性或方法,则在组件的
behaviors字段中定义靠后的behavior的属性或方法会覆盖靠前的同名属性或方法; - 在 2 的基础上,若存在嵌套引用
behavior的情况,则规则为:父 behavior覆盖子 behavior中的同名属性或方法。
- 若组件本身有这个属性或方法,则组件的属性或方法会覆盖
- 如果有同名的数据字段 (data):
- 若同名的数据字段都是对象类型,会进行对象合并;
- 其余情况会进行数据覆盖,覆盖规则为:组件 >
父 behavior>子 behavior、靠后的 behavior>靠前的 behavior。(优先级高的覆盖优先级低的,最大的为优先级最高)
- 生命周期函数不会相互覆盖,而是在对应触发时机被逐个调用:
acess-token
access_token 是小程序全局唯一后台接口调用凭据,调用绝大多数后台接口时都需使用。开发者可以通过 getAccessToken 接口获取并进行妥善保存。
为了 access_token 的安全性,后端 API 不能直接在小程序内通过 wx.request 调用,即 api.weixin.qq.com 不能被配置为服务器域名。开发者应在后端服务器使用getAccessToken获取 access_token,并调用相关 API;