91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

小程序使用watch監聽數據變化的方法詳解

發布時間:2020-10-02 12:07:45 來源:腳本之家 閱讀:233 作者:jANE2160 欄目:web開發

眾所周知,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)
   }
  })
 }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临湘市| 阳春市| 马龙县| 南昌市| 衡阳市| 崇文区| 隆安县| 淳安县| 阜平县| 湖南省| 巴南区| 勃利县| 新竹市| 黎川县| 南投市| 金溪县| 荃湾区| 星座| 朝阳区| 娄烦县| 阿荣旗| 登封市| 泽库县| 广河县| 麻栗坡县| 崇文区| 维西| 吉木萨尔县| 宜宾县| 孝感市| 阜宁县| 稷山县| 华蓥市| 东港市| 嘉黎县| 遂平县| 葫芦岛市| 苍溪县| 平乡县| 东兴市| 鄂温|