零基础学小程序 —— 模板语法(二)
目录
WXML 模板语法
1.数据绑定
在 data 中定义页面的数据(motto)
Mustache 语法的格式
2.事件绑定
2-1 什么是事件
2-2 小程序中常用的事件
2-3 事件对象的属性列表
2-4 bindtap 的语法格式
2-5 在事件处理函数中为 data 中的数据赋值
2-6 事件传参
2-7 bindinput 的语法格式
3.条件渲染
3-1 wx:for
结束
上文我们已经创建好了小程序,并了解了一些基本的配置,新手建议从第一章开始看
零基础学小程序 —— 小程序入门(一)
接下里我们将深入的讲解小程序的模板语法
WXML 模板语法
1.数据绑定
在vue2中我们的数据是在data(script)中定义的,数据是在模板(template)中使用的,而在我们小程序里我们的数据是在页面对应的 .js(ts) 文件中Page里面的data中定义
在 data 中定义页面的数据(motto)

Mustache 语法的格式
把data中的数据绑定到页面中渲染,使用 Mustache 语法(双大括号)将变量包起来即可

2.事件绑定
2-1 什么是事件
学过js的同学就应该知道什么是事件,这里照顾一下没有基础的同学,事件就是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。

2-2 小程序中常用的事件
既然已经了解了什么是事件,那么小程序中是事件有哪些呢?跟我们的js有什么不同呢,接着往下看。
先看文档

这里提供了那么多事件,我这边就挑几个常用的。
| 类型 | 绑定方式 | 事件描述 |
|---|---|---|
| tag | bindtap或bind:tap | 手指触摸后马上离开,相当于js中的click事件 |
| input | bindinput或bind:input | 文本框的输入事件 |
| change | bindchange或bind:change | 状态改变时触发 |
2-3 事件对象的属性列表
如无特殊说明,当组件触发事件时,逻辑层绑定该事件的处理函数会收到一个事件对象。
这里总结一些重要的事件对象,了解即可,用到可以随时查阅文档。(下列事件对象全是取自官方文档)
| 属性 | 类型 | 说明 |
|---|---|---|
| type | String | 事件类型 |
| timeStamp | Integer | 页面打开到触发事件所经过的毫秒数 |
| target | Object | 触发事件的组件的一些属性值集合 |
| currentTarget | Object | 当前组件的一些属性值集合 |
| detail | Object | 额外的信息 |
| touches | Array | 触摸事件,当前停留在屏幕中的触摸点信息的数组 |
| changedTouches | Array | 触摸事件,当前变化的触摸点信息的数组 |
2-4 bindtap 的语法格式
在小程序中,不存在 html 中的 onclick 鼠标点击事件,而是通过 tap 事件来响应用户的触摸行为,
上面讲了那么多tap事件,那么接下里带着大家实际操作一下。
首先在我们的index.wxml里面一个按钮在给它添加一个bindtap事件
{{motto}}
然后在我们的js(ts)页面中写入对应的事件处理函数(事件参数通过我们的形参event简写成我们的e接收)
因为我这里是用的ts,在测试阶段给他一个any类型以免报错,
btn(e:any){console.log('确定被触发',e)},
然后回到我们的页面点击触发可以看到我们的btn就被触发了。

2-5 在事件处理函数中为 data 中的数据赋值
那么上面我们的事件已经学习完毕了,那如果我想把我们的上面data中的motto的值改变呢,现在我们的motto的值是‘hello word’
那如果我想一点击我们的btn函数就将我们的motto改变成 '你好呀'该怎么做呢?
如果学过vue的同学肯定就要说了,可以用this.来进行赋值修改。但是我们现在是用的小程序了。可不能像之前的方式了。其实也很简单,
我们这里可以通过我们的this.setData来进想修改,听到这里,学习过react的同学是不是就感觉特别熟悉呢?接着往下看。因为是初学这里就不深入讲解他的原理了。我们直接看使用方式。
btn(e:any){console.log('确定被触发',e)this.setData({motto:'你好呀'})},
这里我们一点击

数据就更新了。他的写法是
this.setData({这里可以直接以对象的新式修改data中已有的数据的值})
2-6 事件传参
说到事件传参学过js的同学这时候又会说了,这个我知道直接在事件的后面加上括号写上需要传递的参数。错。小程序中的事件传参比较特殊,不能在绑定事件的同时为事件处理函数传递参数
我们先举个错误的例子
首先将我们的wxml改一下
{{motto}}
然后点击确定,

那到底是为什么呢?
因为小程序会把 btn的属性值,统一当作事件名称来处理,相当于要调用一个名称为 btn(123) 的事件处理函数。
那我们正确的做法是怎么样的呢?
原来我们可以这样
{{motto}}
我们可以使用data -info=参数的值
最终我们的info会被解析为参数名字,意思就是你可以
data-名字=参数的值
然后我们打印一下 通过 e.target.dataset 就可以拿到我们的值了

2-7 bindinput 的语法格式
在小程序中,通过 input 事件来响应文本框的输入事件我们上面提到过可以通过bindinput,演示一下
{{motto}}
这里因为看不清所以加了一个边框。
在我们的ts中绑定事件
inputbtn(e:any){console.log(e)}
然后我们随机输入一个数字。在我们的e.detail.value就是我们最新的值

3.条件渲染
3-1 wx:for
首先来看看wx:for的定义
wx:for 可以根据指定的数组,循环渲染重复的组件结构
看到这里我们学过vue的小伙伴又会说呢,那不就是v-for吗?这次没错了。wx:for就相当于我们vue中的v-for,那我们看看他的写法把 首先在我们ts文件中定义一个数值 array
array:[{title:'vue',id:1},{title:'react',id:2},{title:'uniapp',id:3}],
然后在我们wxml中
{{motto}} {{item.title}}
这里跟我们vue不同的是我们直接wx:for我们的数组 然后不用直接可以通过我们的item点我们的值进行渲染
默认情况下,当前循环项的索引用 index 表示;当前循环项用 item 表示。

那如果我不想用item点xx进行渲染怎么办呢。其实也简单我们可以
使用 wx:for-index 可以指定当前循环项的索引的变量名
使用 wx:for-item 可以指定当前项的变量名
结束
好啦,到这里我们的微信小程序模板语法就讲解完毕了,如果你觉得写的还不错你可以点个关注哦。
如果你还有什么问题你可以选择↓↓↓
微信公众号搜索 海海学前端 来了解更多
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
