1.数据绑定
页面数据定义在当前页面的js文件中,通过配置data属性为当前页面添加数据,使用{{}}语法将变量绑定到标签中。
页面数据定义 home.js
Page({
data:{
msg:"页面数据"
}
})
将数据与标签进行绑定 home.wxml
<text class="title">微信小程序 demo</text>
<view>这里显示当前页面绑定的数据 - {{msg}}</view>
渲染结果:
2.全局数据
数据绑定只对当前页面有效,如果某些数据要在多个页面共享,就需要写到全局配置对象里面。
全局数据定义在app.js中,通过配置globalData属性添加全局数据,这里定义的数据所有的页面都能访问。
访问方式:获取当前app实例,通过访问实例的globalData属性就能访问全局变量。
注意:如果想将全局数据绑定到页面标签中,则先要将全局数据在页面的data中进行声明,才能使用
全局数据定义
//app.js
App({
globalData:{
globalTitle:"我是全局标题"
}
})
页面使用全局数据时先在data中声明
//home.js
//获取当前实例
const app = getApp()
Page({
data:{
msg:"页面数据",
globalTitle:app.globalData.globalTitle
}
})
home.wxml
<text class="title">微信小程序 demo</text>
<view>这里显示当前页面绑定的数据 - {{msg}}</view>
<view>{{globalTitle}}</view>
渲染结果:
3.事件
(1)小程序的常见事件:
tap:触摸后马上离开。
longpress:触摸后,超过 350ms 再离开。如果指定了该事件的回调函数并触发了该事件,tap事件将不被触发。
touchstart:触摸开始。
touchmove:触摸后移动。
touchcancel:触摸动作被打断,如来电提醒,弹窗等。
touchend:触摸结束。
(2)事件绑定
bind:冒泡阶段触发。
catch:冒泡阶段触发,并取消事件进一步向上冒泡。
capture-bind:捕获阶段触发。
capture-catch:捕获阶段触发,并中断事件,不再向下传播,即中断捕获阶段,并取消随后的冒泡阶段。
(3)事件函数注册
事件触发时的回调函数直接在Pages()的配置项中进行声明,回调函数的参数就是事件对象
//获取当前实例
const app = getApp()
Page({
data:{
msg:"页面数据",
globalTitle:app.globalData.globalTitle
},
test(event){
console.log(‘点击了‘)
}
})
(4)简单的实例:
<button bind:tap="test">点我</button>
<button bindtap="test">简写成bindtap</button>
点击任何一个按钮,控制台都会打印 ‘点击了‘
(5)事件对象
currentTarget:事件绑定的当前组件。同H5的自定义属性一样,可以通过dataset访问该标签的自定义属性
target:触发事件的源组件,同H5的自定义属性一样,可以通过dataset访问标签的自定义属性
type:事件类型
touches/changedTouches:触点信息,包含坐标等信息
detail:自定义事件所携带的数据,如表单组件的提交事件会携带用户的输入,媒体的错误事件会携带错误信息,详见组件定义中各个事件的定义。点击事件的detail 带有的 x, y 同 pageX, pageY 代表距离文档左上角的距离。
4.数据更新
要修改页面数据的值,使用this.setData()方法。第一个参数为对象,表示要修改的键值对,第二个数据是成功的回调(这个回调是异步的)
修改全局数据的值,直接赋值即可。但是绑定了全局数据的页面,相关数据要重新取值,不然新的值不会同步过去
test(event){
//修改当前页面的数据
this.setData({
msg:"已被修改"
},function(){
console.log(‘msg修改成功‘)
})
//修改全局数据
app.globalData.globalTitle = "全局数据已被修改"
console.log(app.globalData.globalTitle)
}
执行结果:
上面的例子全局数据更新没有同步至页面中,需要手动更新,代码如下:
test(event){
//修改全局数据
app.globalData.globalTitle = "全局数据已被修改"
console.log(app.globalData.globalTitle)
//修改当前页面的数据,并重新获取全局数据
this.setData({
msg:"已被修改",
globalTitle:app.globalData.globalTitle
},function(){
console.log(‘msg修改成功‘)
})
}