真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

小程序使用watch監(jiān)聽數(shù)據(jù)變化的方法詳解

眾所周知,Vue中,可以使用監(jiān)聽屬性 watch來觀察和響應 Vue 實例上的數(shù)據(jù)變化,那么小程序能不能實現(xiàn)這一點呢?

成都創(chuàng)新互聯(lián)是專業(yè)的齊齊哈爾網(wǎng)站建設公司,齊齊哈爾接單;提供網(wǎng)站設計、網(wǎng)站制作,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行齊齊哈爾網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

監(jiān)聽器的原理,是將data中需監(jiān)聽的數(shù)據(jù)寫在watch對象中,并給其提供一個方法,當被監(jiān)聽的數(shù)據(jù)的值改變時,調用該方法。​​

我們需要用到Javascript中的Object.defineProperty()方法,來手動劫持對象的getter/setter,從而實現(xiàn)給對象賦值時(調用setter),執(zhí)行watch對象中相對應的函數(shù),達到監(jiān)聽效果。

Object.defineProperty()方法,會直接在一個對象上定義一個新屬性,或者修改一個對象的現(xiàn)有屬性, 并返回這個對象。

這里假定有多個頁面需要監(jiān)聽需求,把監(jiān)聽方法寫在app.js中,以便全局調用

onLaunch: function () {},
// 設置監(jiān)聽器
watch: function (ctx, obj) {
 Object.keys(obj).forEach(key => {
  this.observer(ctx.data, key, ctx.data[key], function (value) {
   obj[key].call(ctx, value)
  })
 })
},
// 監(jiān)聽屬性,并執(zhí)行監(jiān)聽函數(shù)
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
  },
 })
}

然后,在需要監(jiān)聽的頁面onLoad中,調用watch方法(其中test是要監(jiān)聽的數(shù)據(jù),當test在其他方法中通過this.setData賦值后,watch就能監(jiān)聽到test的變化了)

const app = getApp()
Page({
 data: {
  test: 0
 },
 onLoad: function () {
  // 調用監(jiān)聽器,監(jiān)聽數(shù)據(jù)變化
  app.watch(this, {
   test: function (newVal) {
    console.log(newVal)
   }
  })
 }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


本文標題:小程序使用watch監(jiān)聽數(shù)據(jù)變化的方法詳解
網(wǎng)頁URL:http://weahome.cn/article/gcggge.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部