当前位置:   article > 正文

[小程序开发] wxml语法

[小程序开发] wxml语法

一、声明和绑定数据

        小程序中使用的数据均需要在Page()方法的data对象中进行声明定义。

        在WXML使用Mustache语法(双大括号{{  }})将变量包起来,从而进行数据绑定。

在{{  }}语法中,只能写表达式,不能写语句,也不能调用js相关的语法。

  1. <!-- 展示数据 -->
  2. <view>{{ name }}</view>
  1. <!-- 绑定属性值 -->
  2. <checkbox checked="{{true}}"/>

 二、修改数据

        通过调用setData()方法进行修改,setData()接收对象作为参数,key是需要修改的数据,value是最新的值。

        setDate()方法作用:

           1、更新数据

           2、驱动视图更新

        不推荐使用赋值的方法进行修改,通过赋值的方式修改数据无法改变页面的数据。

  •  修改/新增
  1. this.setData({
  2. //如果对象新增属性,可以将key写成数据路径的方式
  3. 'userInfo.name':"tom",
  4. 'userInfo.age':10
  5. })

简化新增和修改,使用ES6提供的展开运算符或Object.assign()方法 。

  1. //ES6提供的展开运算符...
  2. //通过展开运算符能够将对象中的属性复制给另一个对象,后面的属性会覆盖前面的属性
  3. const userInfo={
  4. ...this.data.userInfo,
  5. name:"jerry",
  6. age:18
  7. }
  8. this.setData({userInfo:userInfo}) //键和值一样可简写为this.setData({userInfo})
  1. //Object.assign()方法
  2. //将多个对象合并为一个对象
  3. const userInfo=Object.assign(this.data.userInfo,{name:"tom"},{age:18})
  4. this.setData({userInfo:userInfo})//键和值一样可简写为this.setData({userInfo})
  • 删除
  1. //删除单个属性
  2. delete this.data.userInfo.age
  3. this.setData({
  4. userInfo:this.data.userInfo
  5. })
  6. //删除多个属性,可以使用ES6提供的rest剩余参数
  7. const{name,age,...rest}=this.data.userInfo
  8. this.setData({
  9. userInfo:rest
  10. })

 三、修改数组类型数据

  •   新增
  1. updateList(){
  2. // 新增数组元素
  3. // push方法
  4. this.data.list.push(6)
  5. this.setData({list:this.data.list})
  6. // concat方法
  7. const newList=this.data.list.concat(7)
  8. this.setData({list:newList})
  9. // 使用展开运算符
  10. const newList=[...this.data.list,8]
  11. this.setData({list:newList})
  12. }
  • 修改
  1. // 修改数组元素
  2. //方法一
  3. this.setData({"list[1]":6})
  4. //方法二
  5. this.setData({"list[0].name":"jerry"})
  • 删除
  1. // 删除数组元素
  2. // 方法一
  3. this.data.list.splice(1,2)
  4. this.setData({list:this.data.list})
  5. //方法二
  6. const newList=this.data.list.filter(item=> item!==2)
  7. this.setData({list:newList})

四、双向数据绑定

         即用户输入的数据可以改变页面,在对应属性之前添加model:前缀。

  1. <!-- 数据单向绑定,数据能够影响页面,但是页面更新不会影响到数据 -->
  2. <input type="text" value="{{value}}"/>
  3. <!-- 数据双向绑定,数据能够影响页面,页面更新也会影响到数据 -->
  4. <!-- 添加model:属性 -->
  5. <input type="text" model:value="{{value}}"/>

五、列表渲染

        通过循环遍历一个数组或对象,将其中的每个元素渲染到页面上。可通过使用wx.for属性绑定一个数组或对象,可使用每一项数据重复渲染当前组件,每一项的变量名默认为item,下标变量名默认为index。

  1. <!-- 渲染数组,item:数组的每一项,index:下标 -->
  2. <view wx:for="{{numList}}">{{item}}-{{index}}</view>
  3. <!-- 渲染对象,item:对象属性的值,index:对象属性 -->
  4. <view wx:for="{{obj}}">{{item}}-{{index}}</view>

使用wx.for遍历时,建议加上wx:key属性,添加wx:key属性值时,不需要使用双大括号语法,直接使用遍历的array中item的某个属性。

wx.key的值以两种形式提供:

1、字符串:代表需要遍历的array中item的某个属性,该属性的值需要是列表中唯一的字符串或数字,且不能动态改变。

2、保留关键字*this代表在for循环中的item本身,当item本身是一个唯一的字符串或数字时可以使用。

  1. <!-- wx:key两种添加方式 -->
  2. <!-- 方式1,写成字符串,需要是遍历的数组中item的某个属性,要求该属性是列表中唯一的字符串或数字,不能进行动态改变。 -->
  3. <view wx:for="{{fruitList}}" wx:key="id">{{item.name}}</view>
  4. <!-- 方式2,保留关键字*this,*this代表的是item本身,item本身是唯一的字符串或数字。 -->
  5. <view wx:for="{{numList}}" wx:key="*this">{{item}}</view>

六、更改默认的变量名和下标

        可以使用wx:for-item和wx:for-index对默认的变量名和下标进行更改。

  •         使用wx:for-item可以指定数组当前元素的变量名
  •         使用wx:for-index可以指定数组当前下标的变量名
  1. <!-- 更改默认的变量名和下标(数组) -->
  2. <view wx:for="{{fruitList}}" wx:key="id" wx:for-item="fruitItem" wx:for-index="fruitIndex">
  3. {{fruitIndex}}-{{fruitItem.name}}
  4. </view>
  5. <!-- 更改默认的变量名和下标(对象) -->
  6. <view wx:for="{{obj}}" wx:key="index" wx:key="id" wx:for-item="value" wx:for-index="key">
  7. {{key}}-{{value}}
  8. </view>

七、渲染一个包含多个节点的结构块

        在<block/>标签上使用wx:for。

  • <block/>并不是一个组件,仅是一个包装元素,不会在页面上做任何渲染,只接受控制属性(可以在页面中展示,但是在调试器WXML中不展示)
  • <block/>在wxml中可用于组织代码结构,支持列表渲染、条件渲染等。
  1. <block wx:for="{{fruitList}}" wx:key="id" wx:for-item="fruitItem" wx:for-index="fruitIndex">
  2. <view >名字:{{fruitItem.name}}</view>
  3. <view>价格:{{fruitItem.price}}</view>
  4. </block>

八、条件渲染

        主要用来控制页面结构的展示和隐藏,在微信小程序中实现条件渲染有两种方式:

        1、使用wx:if 、wx:elif、wx:else属性组

  1. <view wx:if="{{num===1}}">num等于{{num}}</view>
  2. <view wx:elif="{{num===2}}">num等于{{num}}</view>
  3. <view wx:else>num大于2,num等于{{num}}</view>

        2、使用hidden属性

  1. <!-- 定义isFlag为true -->
  2. <view hidden="{{ !isFlag }}">如果isFlag是true则展示结构,否则隐藏结构</view>

两者区别:

1、wx:if:当条件为true时将结构展示出来,否则结构不会进行展示,通过移除/新增节点的方式实现。

2、hidden:当条件为true时会将结构隐藏,否则结构会展示出来,通过display样式属性来实现(display:none)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/199766
推荐阅读
相关标签
  

闽ICP备14008679号