====== 5.Page()函数 ====== ===== -#1 Page() ===== Page() 函数用来注册一个页面。接受一个 object 参数,其指定页面的初始数据、生命周期函数、事件处理函数等。参考[[https://www.w3cschool.cn/weixinapp/weixinapp-page.html|微信小程序 注册页面 Page()函数]] \\ ^ 属性 | 类型 ^ 描述 ^ | data | Object | 页面的初始数据 | Page({ data: { text: "This is page data." }, xxxx: function(options) { // Do some initialize when page load. }, }) data 将会以 JSON 的形式由逻辑层传至渲染层,所以其数据必须是可以转成 JSON 的格式:字符串,数字,布尔值,对象,数组。 \\ {{text}} {{array[0].msg}} Page({ data: { text: 'init data', array: [{msg: '1'}, {msg: '2'}] } }) ===== -#2 事件处理函数 ===== Page 中还可以定义组件事件处理函数。在渲染层的组件中加入事件绑定,当事件被触发时,就会执行 Page 中定义的事件处理函数。 click me Page({ viewTap: function() { console.log('view tap') } }) ==== - Page.route ==== 到当前页面的路径,类型为String。 Page.prototype.route route字段可以获取到当前页面的路径。 ==== - Page.prototype.setData() ==== Page.prototype.setData(Object data, Function callback) setData 函数用于将数据从逻辑层发送到视图层,同时改变对应的 this.data 的值。 \\ setData() 参数格式 接受一个对象,以 key,value 的形式表示将 this.data 中的 key 对应的值改变成 value \\ 注意: \\ * 直接修改 this.data 而 :!: 不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致 * 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。 {{text}} {{num}} {{array[0].text}} {{object.text}} {{newField.text}} // index.js Page({ data: { text: 'init data', num: 0, array: [{text: 'init data'}], object: { text: 'init data' } }, changeText: function() { // this.data.text = 'changed data' // 不要直接修改 this.data // 应该使用 setData this.setData({ text: 'changed data' }) }, changeNum: function() { // 或者,可以修改 this.data 之后马上用 setData 设置一下修改了的字段 this.data.num = 1 this.setData({ num: this.data.num }) }, changeItemInArray: function() { // 对于对象或数组字段,可以直接修改一个其下的子字段,这样做通常比修改整个对象或数组更好 this.setData({ 'array[0].text':'changed data' }) }, changeItemInObject: function(){ this.setData({ 'object.text': 'changed data' }); }, addNewField: function() { this.setData({ 'newField.text': 'new data' }) } }) ===== -#3 页面间通信 ===== ===== -#4 使用 behaviors() ===== [[https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/behaviors.html | behaviors]] 可以用来让多个页面有相同的数据字段和方法。 [[https://developers.weixin.qq.com/miniprogram/dev/reference/api/Behavior.html|参数说明]] // my-behavior.js module.exports = Behavior({ data: { sharedText: 'This is a piece of data shared between pages.' }, methods: { sharedMethod: function() { this.data.sharedText === 'This is a piece of data shared between pages.' } } }) // page-a.js var myBehavior = require('./my-behavior.js') Page({ behaviors: [myBehavior], //引入其它的 behavior onLoad: function() { this.data.sharedText === 'This is a piece of data shared between pages.' } }) ==== - 组件中使用 ==== ===== -#5 使用 Component ===== Page 构造器适用于简单的页面。但对于复杂的页面, Page 构造器可能并不好用。 [[https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/component.html | Component]] 构造器的主要区别是:方法需要放在 methods: { } 里面 Component({ data: { text: "This is page data." }, methods: { onLoad: function(options) { // 页面创建时执行 }, onPullDownRefresh: function() { // 下拉刷新时执行 }, // 事件响应函数 viewTap: function() { // ... } } })