注册页面的相关教程在:
https://mp.weixin.qq.com/debug/wxadoc/dev/framework/app-service/page.html?search-input=setData
简要说一下要点:
Page()函数放在对应页面的 js 文件里的。
Page()函数用来注册一个页面。接受一个 object 参数,其指定页面的初始数据、生命周期函数、事件处理函数等。object属性展示:


所以页面的写法应该是
//index.js
Page({
data: { text:"在这里主要写的是页面的初始数据"},
onLoad:function(options){
// Do some initialize when page load.
},
onReady:function(){
// Do something when page ready.
},
// Event handler.
viewTap: function() {
this.setData({
text: 'Set some data for updating view.'
},function() {
// this is setData callback }
)
},
data:初始化数据将作为页面的第一次渲染。data 将会以 JSON 的形式由逻辑层传至渲染层,所以其数据必须是可以转成 JSON 的格式:字符串,数字,布尔值,对象,数组。
渲染层可以通过WXML对数据进行绑定。

onLoad: 页面加载
一个页面只会调用一次,可以在 onLoad 中获取打开当前页面所调用的 query 参数。
Page.prototype.setData()
setData函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的this.data的值(同步)。

object 以 key,value 的形式表示将 this.data 中的 key 对应的值改变成 value。 callback 是一个回调函数,在这次setData对界面渲染完毕后调用。
其中 key 可以非常灵活,以数据路径的形式给出,如array[2].message,a.b.c.d,并且不需要在 this.data 中预先定义。
注意:
直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。
单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
请不要把 data 中任何一项的 value 设为undefined,否则这一项将不被设置并可能遗留一些潜在问题。

object 以 key,value 的形式表示将 this.data 中的 key 对应的值改变成 value.比如下面的text就是key,设置成value为changed data。
另外一个注意点:在data中,如果是text:"init data"在wxml中数据绑定的时候,直接用{{text}}就可以了。如果是array:[{text:"init data"}] 在wxml中数据绑定的时候,要用{{array[0].text}},同理{{object.text}} ,根据在data中的缩进,确定层次,使用点来确定是谁的属性。data中的第一层属性不需要使用,第二层之后就开始需要了。

“直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。”说的就是下面changeNum 中this.data.num = 1 不会改变页面的状态,必须调用this.setData({num:this.data.num}) 才可以改变。

知识点1、以前的html获取DOM节点,然后给DOM某个元素赋值。小程序没有这样DOM节点,但是可以直接数据绑定,进行数据传递。单向数据绑定,从脚本文件向前端传递。但是前端标签数据改变,脚本文件不会改变。是通过事件传递才行。 不是双向绑定。
知识点2、如何绑定。在wxml标签里用双花括号。
知识点3、onload时候,通过脚本向服务器请求数据。获取后的数据,通过setData(获取的数据)函数。
不用全部背下来,遇到之后,当做查询手册就行了。但是还是要知道怎么在wxml中使用数据绑定。
小程序官方数据绑定教程:
数据绑定
WXML 中的动态数据均来自对应 Page 的 data。注意关键字:“对应 Page 的 data”
简单绑定
数据绑定使用 Mustache 语法(双大括号)将变量包起来,可以作用于:
内容
<view>{{ message }}</view>
Page({
data: { message:'Hello MINA!'}
})
组件属性(需要在双引号之内)
<view id="item-{{id}}"></view>
Page({
data: { id:0}
})
控制属性(需要在双引号之内)
<view wx:if="{{condition}}"></view>
Page({
data: { condition:true}
})
关键字(需要在双引号之内)
true:boolean 类型的 true,代表真值。
false: boolean 类型的 false,代表假值。
<checkbox checked="{{false}}"></checkbox>
特别注意:不要直接写checked="false",其计算结果是一个字符串,转成 boolean 类型后代表真值。
运算
可以在{{}}内进行简单的运算,支持的有如下几种方式:
三元运算
<view hidden="{{flag ? true : false}}">Hidden</view>
算数运算
<view>{{a + b}} + {{c}} + d</view>
Page({
data: { a:1, b:2, c:3}
})
view中的内容为3 + 3 + d。
逻辑判断
<view wx:if="{{length > 5}}"></view>
字符串运算
<view>{{"hello" + name}}</view>
Page({ data:{ name:'MINA'}})
数据路径运算
<view>{{object.key}} {{array[0]}}</view>
Page({ data: { object: { key:'Hello '}, array: ['MINA'] }})
组合
也可以在 Mustache 内直接进行组合,构成新的对象或者数组。
数组
<view wx:for="{{[zero, 1, 2, 3, 4]}}">{{item}}</view>
Page({ data: { zero:0}})
最终组合成数组[0, 1, 2, 3, 4]。
对象
<template is="objectCombine"data="{{for: a, bar: b}}"></template>
Page({ data: { a:1, b:2}})
最终组合成的对象是{for: 1, bar: 2}
也可以用扩展运算符...来将一个对象展开
<template is="objectCombine"data="{{...obj1, ...obj2, e: 5}}"></template>
Page({ data: { obj1: { a:1, b:2}, obj2: { c:3, d:4} }})
最终组合成的对象是{a: 1, b: 2, c: 3, d: 4, e: 5}。
如果对象的 key 和 value 相同,也可以间接地表达。
Page({ data: { foo:'my-foo', bar:'my-bar'}})
最终组合成的对象是{foo: 'my-foo', bar:'my-bar'}。
注意:上述方式可以随意组合,但是如有存在变量名相同的情况,后边的会覆盖前面,如:
<template is="objectCombine"data="{{...obj1, ...obj2, a, c: 6}}"></template>
Page({ data: { obj1: { a:1, b:2}, obj2: { b:3, c:4}, a:5}})
最终组合成的对象是{a: 5, b: 3, c: 6}。
注意:花括号和引号之间如果有空格,将最终被解析成为字符串
<view wx:for="{{[1,2,3]}} ">
{{item}}
</view>
等同于
<view wx:for="{{[1,2,3] + ' '}}">
{{item}}
</view>
网友评论