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

1、声明和绑定数据

  • 小程序页面中使用的数据均需要在 Page() 方法的 data 对象中进行声明定义
  • 在将数据声明好以后,需要在 WXML 中绑定数据,数据绑定最简单的方式是使用 Mustache 语法(双大括号)将变量包起来。
  • {``{ }} 内部可以做一些简单的运算,支持如下几种方式:
    • 算数运算
    • 三元运算
    • 逻辑判断
    • 其他...
javascript 复制代码
Page({
  // 在小程序页面中所需要使用的数据均来自于 data 对象
  data: {
    id: 1,
    isChecked: false,
    school: 'xxx',
    obj: {
      name: 'tom'
    }
  }
})
html 复制代码
<!-- 如果需要展示数据,在 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 方法有两个作用:
    • 更新数据
    • 驱动视图更新
javascript 复制代码
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 中,普通属性的绑定是单向的,例如:

html 复制代码
<input value="{{ num }}" />

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

但如果用户修改了输入框里的值,却不会同时改变 data 中的 num

如果需要在用户输入的同时也将 data 中的数据修改 ,需要借助简易双向绑定机制。

此时可以在对应项目之前加入 model: 前缀即可,例如:

html 复制代码
<input model:value="{{ value }}" />

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

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

4、数据监听

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

javascript 复制代码
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) {}
  }
})
相关推荐
abc80021170342 小时前
前端Bug 修复手册
前端·bug
Best_Liu~2 小时前
el-table实现固定列,及解决固定列导致部分滚动条无法拖动的问题
前端·javascript·vue.js
_斯洛伐克3 小时前
下降npm版本
前端·vue.js
苏十八4 小时前
前端进阶:Vue.js
前端·javascript·vue.js·前端框架·npm·node.js·ecmascript
st紫月4 小时前
用MySQL+node+vue做一个学生信息管理系统(四):制作增加、删除、修改的组件和对应的路由
前端·vue.js·mysql
乐容5 小时前
vue3使用pinia中的actions,需要调用接口的话
前端·javascript·vue.js
似水明俊德5 小时前
ASP.NET Core Blazor 5:Blazor表单和数据
java·前端·javascript·html·asp.net
至天6 小时前
UniApp 中 Web/H5 正确使用反向代理解决跨域问题
前端·uni-app·vue3·vue2·vite·反向代理
与墨学长6 小时前
Rust破界:前端革新与Vite重构的深度透视(中)
开发语言·前端·rust·前端框架·wasm
社会底层无业大学生6 小时前
uniapp微信小程序电子签名
微信小程序·小程序·uni-app