📚WXML模板语法—数据绑定
📰数据绑定的基本原则
① 在data 中定义数据
② 在 WXML 中使用数据
📰在 data 中定义页面数据
在页面对应的 .js 文件中,把数据定义到 data 对象中即可:
Page({ data: { //字符串类型的数据info:'init data', //数据类型的数据msgList:[{msg:'hello'},{msg:'world'}] } })
📰Mustache 语法的格式
把data的数据绑定到页面中渲染,使用 Mustache 语法(双大括号)把变量包起来即可。语法格式:
<view>{{要绑定的数据}}</view>
📰Mustache 语法应用场景
● 绑定内容 ● 绑定属性 ● 运算(三元运算、算术运算等)
动态绑定内容
页面数据如下:
Page({ data: { say:'hello world' } })
页面结构如下:
<view>{{say}}</view>
动态绑定属性
页面数据如下:
Page({ data: { imgSrc:'https://www.baidu.com' } })
页面结构如下:
<imagesrc='{{imgSrc}}'></image>
三元运算
页面数据如下:
Page({ data: { randomNum:Math.random() *12//生成12以内的随机数 } })
页面结构如下:
<view>{{ randomNum >=8 ? '生成的随机数大于等于8':'生成的随机数小于8' }}</view>
算数运算
页面数据如下:
Page({ data: { randomNum:Math.random()*toFixed(2) //生成一个带有两位小数的随机数 } })
页面结构如下:
<view>生成100以内的随机数:{{randomNum*100}}</view>
📚WXML模板语法—事件绑定
事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务处理。
📰小程序中常用的事件
类型 | 绑定方式 | 事件描述 |
tap | bindtap 或 bind:tap | 手指触摸后马上离开,类似于HTML中的click事件 |
input | bindinput 或 bind:input | 文本框的输入事件 |
change | bindchange 或 bind:change | 状态改变时触发 |
📰事件对象的属性列表
当事件回调触发的时候,会收到一个事件对象 event 。其详细属性如下:
属性 类型 说明
type String 事件类型
timeStamp Integer 页面打开到触发事件所经过的毫秒数
target Object 触发事件的组件的一些属性值的集合
currentTarget Object 当前组件的一些属性值集合
detail Object 额外属性
touches Array 触摸事件,当前停留在屏幕中的触摸点信息的数组
changedTouches Array 触摸事件,当前变化的触摸点信息的数组
📰target 和 currentTarget 的区别
target 是触发该事件的源头组件,而 currentTarget 则是当前事件所绑定的组件,举例:
<viewclass="out-view"outerHandler><buttontype="primary">按钮</button></view>
点击内部的按钮时,点击事件以冒泡的方式向外扩散,也会触发外层view的tap事件处理函数。此外,对于外层的view来说:
●e.target指向的是触发事件的源头组件,因此,e.target是内部的组件
●e.currentTarget指向的是当前正在触发事件的那个组件,因此,e.currentTarget是当前的view组件。
📰bindtap 的语法格式
在小程序中,不存在 HTML 中的onclick鼠标点击事件,而是通过tap事件来响应用户的触摸行为。
① 通过 bindtap,可以为组件绑定 tap 触摸事件,语法格式如下:
<buttontype="primary"bindtap="btnTapHandler">按钮</button>
② 在页面中的 .js 文件中定义对应的事件处理函数,事件参数通过形参 event(一般简写:e)来接收:
Page({ btnTapHandler(e){ //按钮的事件处理函数console.log(e) //事件参数对象e } })
📰在事件处理函数中为 data 中的数据赋值
通过调用 this.setData(dataObject)方法,可以给页面 data 中的数据重新赋值,如下:
<buttontype="primary"bindtap="changeCount">+1</button>
Page({ data: { count:0 }, //修改count的值changeCount(){ this.setData({ count:this.data.count+1 }) } })
📰事件传参
可以为组件提供 data-* 自定义属性传参,其中 * 代表着参数的名字,示例代码如下:
<buttonbindtap="btnHandler"data-info="{{2}}">事件传参</button>
info 会被解析为 参数的名字 、数值 2 会被解析为参数的值。
<buttontype="primary"bindtap="btnTap"data-info="{{2}}">+2</button>
Page({ //修改count的值changeCount(){ this.setData({ count:this.data.count+1 }) }, btnTap(e){ this.setData({ count:this.data.count+e.target.dataset.info }) }, })
📰bindinput 的语法格式
在小程序中,通过 input 事件来响应文本框的输入事件,语法格式如下:
① 通过 bindinput ,可以为文本框绑定输入事件:
<inputbindinput='inputHandler'></input>
② 在页面的 .js 文件中定义事件处理函数
inputHandler(e){ // e.detail.value 是变化过后,文本框最新的值console,log(e.detail.value) }
📰文本框与 data 之间的数据同步
①定义数据
Page({ data:{ msg:'你好' } })
②渲染结构
<inputvalue='{{msg}}'bindinput='iptHandler'></input>
③美化样式
input{ border:1pxsolid#eee; padding:5px; margin:5px; border-radius:3px; }
④绑定 input 事件处理函数
//文本框内容改变事件iptHandler(e){ this.setData({ //通过 e.detail.value 获取到文本框最新的值msg:e.detail.value }) }
📚小程序—API
这里补充一下API的知识:小程序中的 API 是由宿主环境提供的,通过这些丰富的小程序 API ,开发者可以方便的调用微信提供的能力,例如:获取用户信息、本地储存、支付功能等。
📰API的三大分类
① 事件监听 API
● 特点:以 on 开头,用来监听某些事件的触发
● 举例:wx.onWindowResize(function callback) 监听窗口尺寸变化的事件
② 同步 API
● 特点1:以Sync结尾的 API 都是同步 AP
● 特点2:同步 API 的执行结果,可以通过函数返回值直接获取,如果执行出错会抛出异常
● 举例:wx.setStorageSync("key","value") 向本地存储中写入内容
③ 异步 API
● 特点:类似于 jQuery 中的 $.ajax(options) 函数,需通过 success、fail、compele接收调用的结果。
● 举例:wx.request() 发起网络数据请求,通过success回调函数接收数据。