`

小程序使用watch监听数据变化的方法详解

 
阅读更多

众所周知,Vue中,可以使用监听属性 watch来观察和响应 Vue 实例上的数据变化,那么小程序能不能实现这一点呢?

监听器的原理,是将data中需监听的数据写在watch对象中,并给其提供一个方法,当被监听的数据的值改变时,调用该方法。​​

我们需要用到Javascript中的Object.defineProperty()方法,来手动劫持对象的getter/setter,从而实现给对象赋值时(调用setter),执行watch对象中相对应的函数,达到监听效果。

Object.defineProperty()方法,会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

这里假定有多个页面需要监听需求,把监听方法写在app.js中,以便全局调用

onLaunch: function () {},
// 设置监听器
watch: function (ctx, obj) {
 Object.keys(obj).forEach(key => {
  this.observer(ctx.data, key, ctx.data[key], function (value) {
   obj[key].call(ctx, value)
  })
 })
},
// 监听属性,并执行监听函数
observer: function (data, key, val, fn) {
 Object.defineProperty(data, key, {
  configurable: true,
  enumerable: true,
  get: function () {
   return val
  },
  set: function (newVal) {
   if (newVal === val) return
   fn && fn(newVal)
   val = newVal
  },
 })
}

然后,在需要监听的页面onLoad中,调用watch方法(其中test是要监听的数据,当test在其他方法中通过this.setData赋值后,watch就能监听到test的变化了)

const app = getApp()
Page({
 data: {
  test: 0
 },
 onLoad: function () {
  // 调用监听器,监听数据变化
  app.watch(this, {
   test: function (newVal) {
    console.log(newVal)
   }
  })
 }

以上就是本文的全部内容

分享到:
评论

相关推荐

    微信小程序学_配置详解

    2. 数据监听:wx.watchData()和wx.stopWatchData()用于监听并处理数据变化。 八、组件与API 1. 常用组件:如view、text、button、image等,构建UI界面。 2. 事件绑定:通过`bindXXX`属性,如`bindtap`,响应用户...

    详解如何探测小程序返回到webview页面

    在小程序中,Webview是一个用于展示H5页面的组件,它没有像原生小程序页面那样的生命周期方法和事件监听器。因此,当用户在Webview页面与小程序页面之间切换,我们无法直接监听到返回到Webview的事件。为了解决这个...

    vue2 以及小程序面试题文档,帮助你快速了解,vue2框架以及小程序的核心

    【Vue2.0面试题】 1. Vue生命周期:Vue实例从创建到销毁的过程称为生命周期,主要包括8个生命周期...以上是Vue2.0和微信小程序的面试题详解,涵盖了核心概念、使用技巧和常见问题,有助于全面理解Vue和小程序的开发。

    mpvue框架出行小程序didi-master(带截图)

    3. **异步计算和侦听器**:通过`computed`和`watch`,开发者可以处理复杂的逻辑和监听数据变化。 4. **生命周期钩子**:mpvue提供了与Vue.js类似的生命周期钩子,如`created`、`mounted`等,方便在不同阶段进行操作...

    详解vue2.0监听属性的使用心得及搭配计算属性的使用

    在使用Vue 2.0开发应用时,经常会遇到需要对数据变化进行监听的场景,这时我们会用到Vue提供的watch属性。同时,为了更高效地处理数据,Vue还提供了计算属性(computed)这一特性。本文将详细介绍Vue 2.0中监听属性...

    微信小程序 生命周期详解

    此外,微信小程序还提供了 `watch` 和 `computed` 等属性,用于数据监听和计算,以及自定义组件(Component)和页面间的通信(如 `wx.navigateTo`、`wx.redirectTo` 等)等功能,帮助开发者构建复杂的应用场景。...

    js实现视图和数据双向绑定的方法分析

    微信小程序的视图层和JS引擎是分离的,因此需要使用`setData`方法来通知视图层数据发生了变化,从而触发视图更新。 总结来说,JavaScript实现视图和数据双向绑定的方法多种多样,可以根据项目的具体需求和技术栈...

    jquery.way.js数据绑定插件

    **jQuery Way.js 数据绑定插件详解** 在前端开发中,数据绑定是实现用户界面与应用程序数据之间自动同步的关键技术。jQuery Way.js 是一个轻量级的插件,它为 jQuery 提供了数据绑定功能,使得开发者可以更方便地...

    小程序表单认证布局及验证详解

    在验证环节,小程序提供了内置的表单验证功能,可以通过`form`组件的`validate`方法来验证表单数据。例如,我们可以为每个输入字段设置`required`属性来确保必填,或者使用`pattern`属性来指定输入格式,如手机号的...

    vue面试题几十道题.pdf

    - **$emit**:子组件使用 `$emit` 方法触发自定义事件,父组件通过监听这些事件来获取数据或执行相应操作。 4. **v-show 和 v-if 指令** - **共同点**:都能控制元素的显示和隐藏。 - **不同点**:v-show 通过...

    剖析 Vue.js 内部运行机制.pdf

    - **数据变化:** 当数据发生变化时,setter 方法被触发,并通知 Dep 中的每个观察者进行更新。 - **视图更新:** 观察者会执行 update 方法来更新视图。这个过程涉及到重新执行渲染函数、比较新旧虚拟 DOM 并进行...

    前端开源库-on-file-change

    `fs.watch`是Node.js内置的文件系统模块的一部分,用于监听文件或目录的变化。当文件或目录发生创建、修改或删除等操作时,`fs.watch`会触发相应的事件。然而,`fs.watch`的实现依赖于操作系统的具体机制,因此其...

    vue初步学习ppt

    - **`watch`**: 监听特定数据属性的变化,并执行相应的回调函数。这对于实现某些基于数据变化的行为非常有用。 #### Vue.js模板语法 Vue 提供了一系列模板语法来帮助开发者更方便地操作 DOM 和数据: - **数据渲染*...

    vueAndMiniApp

    在Vue中,JavaScript通过`data`属性定义可响应的数据,`methods`用于封装方法,`computed`属性用于计算属性,而`watch`可以监听数据变化并执行相应操作。在微信小程序中,JavaScript同样用于处理页面生命周期、网络...

    使用Inotify 监控目录与文件的方法详解

    使用 `inotify_add_watch(fd, path, mask)` 向已初始化的 Inotify 实例添加要监控的路径。这里的 `mask` 参数是一个位掩码,用于指定需要监听的事件类型,如 `IN_ACCESS`, `IN_MODIFY`, `IN_ATTRIB`, `IN_CLOSE_...

    Vue 面试题( 前端开发 + Vue + 面试题 + 准备)

    `computed`更适合用于计算属性,而`watch`更适合作为响应数据变化的监听器。 #### 二、高级特性 1. **什么是Vuex?** - **答案要点**:Vuex是Vue.js的一个官方状态管理模式与库,用于管理复杂的应用状态。它通过...

    flex如何进行内存优化

    - 当使用`BindingUtils.bindSetter()`或`ChangeWatcher.watch()`等方法时,记得调用`ChangeWatcher.unwatch()`来取消监听,以防止内存泄露。 3. **效果处理:** - 当使用动画效果(如`Effect`)时,在不再需要时...

Global site tag (gtag.js) - Google Analytics