首页 > 其他分享 >数据监听器

数据监听器

时间:2024-12-24 09:33:25浏览次数:4  
标签:触发 数据 some 数据字 监听器 data setData

数据监听器

数据监听器可以用于监听和响应任何属性和数据字段的变化。从小程序基础库版本 2.6.1 开始支持。

使用数据监听器

有时,在一些数据字段被 setData 设置时,需要执行一些操作。

例如, this.data.sum 永远是 this.data.numberAthis.data.numberB 的和。此时,可以使用数据监听器进行如下实现。

Component({
  attached: function() {
    this.setData({
      numberA: 1,
      numberB: 2,
    })
  },
  observers: {
    'numberA, numberB': function(numberA, numberB) {
      // 在 numberA 或者 numberB 被设置时,执行这个函数
      this.setData({
        sum: numberA + numberB
      })
    }
  }
})

在开发者工具中预览效果

监听字段语法

数据监听器支持监听属性或内部数据的变化,可以同时监听多个。一次 setData 最多触发每个监听器一次。

同时,监听器可以监听子数据字段,如下例所示。

Component({
  observers: {
    'some.subfield': function(subfield) {
      // 使用 setData 设置 this.data.some.subfield 时触发
      // (除此以外,使用 setData 设置 this.data.some 也会触发)
      subfield === this.data.some.subfield
    },
    'arr[12]': function(arr12) {
      // 使用 setData 设置 this.data.arr[12] 时触发
      // (除此以外,使用 setData 设置 this.data.arr 也会触发)
      arr12 === this.data.arr[12]
    },
  }
})

如果需要监听所有子数据字段的变化,可以使用通配符 **

Component({
  observers: {
    'some.field.**': function(field) {
      // 使用 setData 设置 this.data.some.field 本身或其下任何子数据字段时触发
      // (除此以外,使用 setData 设置 this.data.some 也会触发)
      field === this.data.some.field
    },
  },
  attached: function() {
    // 这样会触发上面的 observer
    this.setData({
      'some.field': { /* ... */ }
    })
    // 这样也会触发上面的 observer
    this.setData({
      'some.field.xxx': { /* ... */ }
    })
    // 这样还是会触发上面的 observer
    this.setData({
      'some': { /* ... */ }
    })
  }
})

特别地,仅使用通配符 ** 可以监听全部 setData 。

Component({
  observers: {
    '**': function() {
      // 每次 setData 都触发
    },
  },
})

注意事项

  • 数据监听器监听的是 setData 涉及到的数据字段,即使这些数据字段的值没有发生变化,数据监听器依然会被触发。
  • 如果在数据监听器函数中使用 setData 设置本身监听的数据字段,可能会导致死循环,需要特别留意。
  • 数据监听器和属性的 observer 相比,数据监听器更强大且通常具有更好的性能。

标签:触发,数据,some,数据字,监听器,data,setData
From: https://www.cnblogs.com/AtlasLapetos/p/18623884

相关文章

  • 纯数据字段
    纯数据字段纯数据字段是一些不用于界面渲染的data字段,可以用于提升页面更新性能。从小程序基础库版本2.8.2开始支持。组件数据中的纯数据字段有些情况下,某些data中的字段(包括setData设置的字段)既不会展示在界面上,也不会传递给其他组件,仅仅在当前组件内部使用。此时,可......
  • 2024数据智能|大模型时代的数据管理策略和趋势(附实践资料下载)
    在大模型时代,数据管理面临着新的挑战和机遇。以下是一些关键的数据管理策略和趋势:数据治理:数据治理是确保数据安全、完整、可靠和合规性的关键。它包括数据管理、数据质量控制、数据流程管理等。企业需要建立数据治理框架,明确数据所有权、责任、质量标准及监控机制。数据......
  • HarmonyOS Next 入门实战 - 关系型数据库、smartdb
    SQLite数据库HarmonyOS的关系型数据库基于SQLite导入模块import{relationalStore}from'@kit.ArkData';实现步骤:获取RdbStore对象,用于创建数据库,数据表,以及数据库升级等操作letstoreConfig={name:'Poetry.db',//数据库文件名securityLevel:relationalSt......
  • 京东商品详情数据接口(JD.item_get)丨京东API接口指南
    京东商品详情数据接口(JD.item_get)是京东开放平台为开发者提供的重要服务,以下是相关介绍:功能作用获取商品基本信息:包括商品ID、标题、价格、库存量、库存状态、商品链接等,为商品展示和销售管理提供基础数据.查看商品详情描述:涵盖图片、规格参数、包装清单、售后服务等,帮助用......
  • SQL 快速参考:简化数据库管理
    数据定义语言(DDL)创建数据库(CREATEDATABASE)语法:CREATEDATABASEdatabase_name;示例:CREATEDATABASEmy_store;解释:这条语句用于创建一个名为my_store的新数据库,你可以将my_store替换为任何你想要的数据库名称。删除数据库(DROPDATABASE)语法:DROPDATABASEdatabase_name;示......
  • SQL 快速参考:简化数据库管理
    数据定义语言(DDL)创建数据库(CREATEDATABASE)语法:CREATEDATABASEdatabase_name;示例:CREATEDATABASEmy_store;解释:这条语句用于创建一个名为my_store的新数据库,你可以将my_store替换为任何你想要的数据库名称。删除数据库(DROPDATABASE)语法:DROPDATABASEdatabase_name;示......
  • MySQL 触发器通过示例进行解释:自动化数据库操作
    什么是MySQL触发器?触发器是与表相关的数据库对象,当对表执行特定的操作(如INSERT、UPDATE、DELETE)时,触发器会自动执行。它就像是一个在后台默默工作的“小机器人”,一旦监听到指定的事件发生,就会按照预先定义的规则进行操作。创建一个简单的INSERT触发器示例假设我们有两......
  • HotpotQA多跳问答数据集;Kaggle在线数据科学和机器学习竞赛平台
    HotpotQA多跳问答数据集HotpotQA是一个大型的多跳问答数据集,旨在推动研究者开发能够理解和整合来自不同文档信息以回答复杂问题的AI模型,具有多样性、可解释性和开放性等特点.以下是其中一条数据的含义:问题:Facebook的诞生地在哪个城市?答案:美国麻省的剑桥市.支持事实:小扎......
  • 谷歌集群数据集:负载均衡云服务测试数据
    谷歌集群数据集以下为你举例说明各文件中一条数据的具体含义,方便你更好地理解这个数据集:1.machine_events文件示例假设其中有这样一条数据:123456789,101,0,"platform_abc",4,8含义:表示在时间戳为123456789微秒时,机器ID为101的这台机器发生了“ADD(添加)”事件(因为......
  • Java 大视界 -- Java 构建大数据开发环境:从 JDK 配置到大数据框架集成(一)
           ......