上文我们已经创建好了小程序,并了解了一些基本的配置,新手建议从第一章开始看
零基础学小程序 —— 小程序入门(一)
接下里我们将深入的讲解小程序的模板语法
WXML 模板语法
1.数据绑定
在vue2中我们的数据是在data(script)中定义的,数据是在模板(template)中使用的,而在我们小程序里我们的数据是在页面对应的 .js(ts) 文件中Page里面的data中定义
在 data 中定义页面的数据(motto)
Mustache 语法的格式
把data中的数据绑定到页面中渲染,使用 Mustache 语法(双大括号)将变量包起来即可
2.事件绑定
2-1 什么是事件
学过js的同学就应该知道什么是事件,这里照顾一下没有基础的同学,事件就是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。
2-2 小程序中常用的事件
既然已经了解了什么是事件,那么小程序中是事件有哪些呢?跟我们的js有什么不同呢,接着往下看。
先看文档
这里提供了那么多事件,我这边就挑几个常用的。
2-3 事件对象的属性列表
如无特殊说明,当组件触发事件时,逻辑层绑定该事件的处理函数会收到一个事件对象。
这里总结一些重要的事件对象,了解即可,用到可以随时查阅文档。(下列事件对象全是取自官方文档)
2-4 bindtap 的语法格式
在小程序中,不存在 html 中的 onclick 鼠标点击事件,而是通过 tap 事件来响应用户的触摸行为,
上面讲了那么多tap事件,那么接下里带着大家实际操作一下。
首先在我们的index.wxml里面一个按钮在给它添加一个bindtap事件
<view class="usermotto"> <text class="user-motto">{{motto}}</text> <button bindtap="btn">确定</button> </view>
然后在我们的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改一下
<view class="usermotto"> <text class="user-motto">{{motto}}</text> <button bindtap="btn(123)">确定</button> </view>
然后点击确定,
那到底是为什么呢?
因为小程序会把 btn的属性值,统一当作事件名称来处理,相当于要调用一个名称为 btn(123) 的事件处理函数。
那我们正确的做法是怎么样的呢?
原来我们可以这样
<view class="usermotto"> <text class="user-motto">{{motto}}</text> <button bindtap="btn" data-info="{{'你好呀'}}">确定</button> </view>
我们可以使用data -info=参数的值
最终我们的info会被解析为参数名字,意思就是你可以
data-名字=参数的值
然后我们打印一下 通过 e.target.dataset 就可以拿到我们的值了
2-7 bindinput 的语法格式
在小程序中,通过 input 事件来响应文本框的输入事件我们上面提到过可以通过bindinput,演示一下
<view class="usermotto"> <text class="user-motto">{{motto}}</text> <button bindtap="btn" data-info="{{'你好呀'}}">确定</button> <input bindinput="inputbtn" style="border: 1px solid #5cf;" /> </view>
这里因为看不清所以加了一个边框。
在我们的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中
<view class="usermotto"> <text class="user-motto">{{motto}}</text> <button bindtap="btn" data-info="{{'你好呀'}}">确定</button> <input bindinput="inputbtn" style="border: 1px solid #5cf;" /> <view wx:for="{{array}}"> {{item.title}} </view> </view>
这里跟我们vue不同的是我们直接wx:for我们的数组 然后不用直接可以通过我们的item点我们的值进行渲染
默认情况下,当前循环项的索引用 index 表示;当前循环项用 item 表示。
那如果我不想用item点xx进行渲染怎么办呢。其实也简单我们可以
使用 wx:for-index 可以指定当前循环项的索引的变量名
使用 wx:for-item 可以指定当前项的变量名
结束
好啦,到这里我们的微信小程序模板语法就讲解完毕了,如果你觉得写的还不错你可以点个关注哦。