微信小程序学习(四):模板语法、数据绑定、数据监听

1、声明和绑定数据

  • 小程序页面中使用的数据均需要在 Page() 方法的 data 对象中进行声明定义
  • 在将数据声明好以后,需要在 WXML 中绑定数据,数据绑定最简单的方式是使用 Mustache 语法(双大括号)将变量包起来。
  • {{ }} 内部可以做一些简单的运算,支持如下几种方式:
    • 算数运算
    • 三元运算
    • 逻辑判断
    • 其他…
Page({
  // 在小程序页面中所需要使用的数据均来自于 data 对象
  data: {
    id: 1,
    isChecked: false,
    school: 'xxx',
    obj: {
      name: 'tom'
    }
  }
})
<!-- 如果需要展示数据,在 wxml 中需要使用双大括号写法将变量进行包裹 -->

<!-- 展示内容 -->
<view>{{ school }}</view>
<view>{{ obj.name }}</view>

<!-- 绑定属性值,如果需要动态绑定一个变量,属性值也需要使用双大括号进行包裹 -->
<view id="{{ id }}">绑定属性值</view>

<!-- 如果属性值是布尔值,也需要使用双大括号进行包裹 -->
<checkbox checked="{{ isChecked }}" />

<!-- 算术运算 -->
<view>{{ id + 1 }}</view>
<view>{{ id - 1 }}</view>

<!-- 三元运算 -->
<view>{{ id === 1 ? '等于' : '不等于' }}</view>

<!-- 逻辑判断 -->
<view>{{ id === 1 }}</view>

<!-- 在双大括号写法内部,只能写表达式,不能写语句,也不能调用 js 的方法 -->
<!-- <view>{{ if (id === 1) {} }}</view> -->
<!-- <view>{{ for (const i = 0; i <= 10; i++) {} }}</view> -->
<view>{{ obj.name.toUpperCase() }}</view>

2、修改数据

  • 小程序中修改数据并不能直接进行赋值,而是要通过调用 this.setData 方法才能实现
  • 将需要修改的数据以 key:value 的形式传给 this.setData 方法。
  • this.setData 方法有两个作用:
    • 更新数据
    • 驱动视图更新
Page({
  // 页面的初始数据
  data: {
    num: 1,
    userInfo: {
      name: 'Tom',
      age: 10,
      gender: '男'
    },
    animalList: ['Tom', 'Jerry', 'Spyke']
  },
  updateData() {
    this.setData({
      // key 是需要修改的数据
      // value 是最新值
      num: this.data.num + 1,
      userInfo: {}  // 用一个新对象替换原对象,数组同理
    })
    
	// 修改对象中的多个属性
	this.setData({
	  'userInfo.name': 'Jerry',
	  'userInfo.age': 100
	})
	
	// 修改数组中的属性
	this.setData({
	  'animalList[2]': 'Tyke' 
	})
  }
}

3、数据绑定-简易双向绑定

在 WXML 中,普通属性的绑定是单向的,例如:

<input value="{{ num }}" />

如果使用 this.setData 来更新 numnum 和输入框的中显示的值都会被更新为值。
但如果用户修改了输入框里的值,却不会同时改变 data 中的 num

如果需要在用户输入的同时也将 data 中的数据修改 ,需要借助简易双向绑定机制。
此时可以在对应项目之前加入 model: 前缀即可,例如:

<input model:value="{{ value }}" />

如果使用 this.setData 来更新 numnum输入框的中显示的值都会被更新为值。

如果输入框的值被改变了, data 的数据也会随着改变。

4、数据监听

数据监听器可以用于监听和响应任何属性和数据字段的变化,有时,需要在一些数据字段被 setData 设置时,需要执行一些操作。那么就可以使用 observers 数据监听器来实现。语法如下:

Component({
  data: {
    num: 10,
    count: 1,
    obj: { name: 'Tom', age: 10 },
    arr: [1, 2, 3]
  },
  observers: {
    // key 是需要检测数据
    // value 是一个函数,函数接收一个形参作为参数,是最新的值
    num: function(newNum) {
      console.log(newNum)
    },
    
    // 数据监听器支持监听属性或内部数据的变化,可以同时监听多个
    'num, count': function (newNum, newCount) {
       console.log(newNum, newCount)
    }
    
    // 监听器可以监听子数据字段
    'obj.age': function(newAge) {
      console.log(newAge)
    },
    
    // 如果需要监听所有子数据字段的变化,可以使用通配符 ** 
    'obj.**': function(newAge) {
      console.log(newAge)
    },
        
    'arr[0]': function (val) {}
  }
})
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

激洪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值