程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

    • 小程序入门级配置

    • 模板与配置

    • 视图与逻辑

    • 自定义组件

      • 组件的创建与引用
      • 组件样式
      • 数据、方法和属性
      • 数据监听器
        • 1. 什么是数据监听器
        • 2. 数据监听器的基本用法
          • 2.1 组件的 UI 结构
          • 2.2 组件的 .js 文件代码
        • 3. 监听对象属性的变化
          • 3.1 监听对象的属性变化
        • 4. 数据监听器案例
          • 4.1 案例效果
          • 4.2 渲染 UI 结构
          • 4.3 定义按钮的事件处理函数
          • 4.4 监听对象中指定属性的变化
          • 4.5 监听对象中所有属性的变化
      • 纯数据字段
      • 组件的生命周期
      • 插槽
      • 父子组件之间的通信
      • Behaviors
  • uniapp多端开发

  • 小程序开发
  • 原生微信小程序
  • 自定义组件
scholar
2024-10-18
目录

数据监听器

# 数据监听器

# 1. 什么是数据监听器

数据监听器是一种用于监控组件中数据和属性变化的工具。当某个数据字段或属性发生变化时,数据监听器会自动触发对应的回调函数,执行特定的操作。它的作用类似于 Vue 框架中的 watch 侦听器,可以帮助开发者动态响应数据的变化,从而更新页面或执行其他逻辑。

数据监听器的作用:

  • 监听组件内部数据的变化。
  • 响应数据变化并执行回调函数,进行逻辑处理或页面更新。

基本语法格式:

Component({
  data: {
    count: 0
  },
  observers: {
    'count': function(newVal) {
      console.log('count 改变了,新值为:', newVal);
    }
  }
});
1
2
3
4
5
6
7
8
9
10

如上图所示,数据监听器用于监听 count 值的变化,当 count 发生改变时,监听器会执行回调函数。

# 2. 数据监听器的基本用法

通过数据监听器,我们可以监听到数据的变化并根据变化执行相应的逻辑。例如,当组件的 count 数据发生变化时,监听器会被触发,并在控制台输出新的 count 值。

# 2.1 组件的 UI 结构

首先,定义组件的基本 UI 结构,如下图所示:

<view class="container">
  <text>{{ count }}</text>
  <button bindtap="incrementCount">增加</button>
</view>
1
2
3
4

示例:

组件 UI 结构

# 2.2 组件的 .js 文件代码

在组件的 .js 文件中,定义组件的 data 和 observers 监听器。当 count 数据发生变化时,监听器会打印出新的 count 值。

示例代码:

Component({
  data: {
    count: 0
  },
  methods: {
    incrementCount: function() {
      this.setData({
        count: this.data.count + 1
      });
    }
  },
  observers: {
    'count': function(newVal) {
      console.log('count 改变了,新值为:', newVal);
    }
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

每当用户点击按钮,count 的值会增加 1,并且监听器会输出新的值。

示例图:

监听 count 变化

# 3. 监听对象属性的变化

数据监听器不仅可以监听简单数据类型(如 number 或 string)的变化,还可以监听对象中的某个属性的变化。例如,如果你有一个 user 对象,想监听其中某个属性(如 name)的变化,可以通过数据监听器实现。

# 3.1 监听对象的属性变化

示例代码:

Component({
  data: {
    user: {
      name: '张三',
      age: 25
    }
  },
  observers: {
    'user.name': function(newVal) {
      console.log('用户姓名改变了,新值为:', newVal);
    }
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13

如上所示,监听器会监听 user 对象的 name 属性,当 name 值发生变化时,监听器会被触发。

示例图:

监听对象属性的变化

# 4. 数据监听器案例

在这一部分,我们将通过一个完整的案例,展示如何使用数据监听器监听组件中的对象属性变化。

# 4.1 案例效果

该案例展示了一个简单的界面,用户可以点击按钮修改对象中的某个属性,数据监听器会捕捉到这一变化并执行回调。

效果图:

案例效果

# 4.2 渲染 UI 结构

首先,定义页面的基本结构,包含一个用于显示用户信息的文本框和一个按钮用于修改用户属性。

示例代码:

<view class="user-info">
  <text>{{ user.name }}</text>
  <text>{{ user.age }}</text>
  <button bindtap="changeName">修改姓名</button>
</view>
1
2
3
4
5

UI 结构图:

UI 结构

# 4.3 定义按钮的事件处理函数

在 .js 文件中,为按钮定义点击事件处理函数,当用户点击按钮时,修改 user.name 的值。

示例代码:

Component({
  data: {
    user: {
      name: '张三',
      age: 25
    }
  },
  methods: {
    changeName: function() {
      this.setData({
        'user.name': '李四'
      });
    }
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

示例图:

定义事件处理函数

# 4.4 监听对象中指定属性的变化

通过 observers 监听器,监听 user.name 的变化。当用户点击按钮后,user.name 的值改变,监听器会输出新的值。

示例代码:

observers: {
  'user.name': function(newName) {
    console.log('用户姓名改变了,新值为:', newName);
  }
}
1
2
3
4
5

示例图:

监听指定属性的变化

# 4.5 监听对象中所有属性的变化

如果你想监听对象中的所有属性的变化,可以使用通配符 ** 来监听对象中所有属性。当对象的任意属性发生变化时,监听器都会被触发。

示例代码:

observers: {
  'user.**': function(newUser) {
    console.log('用户信息改变了,新值为:', newUser);
  }
}
1
2
3
4
5

示例图:

监听所有属性的变化

总结

数据监听器是微信小程序中非常强大的功能,它可以帮助开发者实时监听组件中的数据和属性变化,并根据变化执行特定的操作。无论是监听简单的数据字段,还是复杂的对象属性,数据监听器都可以轻松应对。在实际开发中,合理使用数据监听器可以让组件更加灵活,提升用户体验。

编辑此页 (opens new window)
上次更新: 2025/01/31, 00:08:39
数据、方法和属性
纯数据字段

← 数据、方法和属性 纯数据字段→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式