小程序監聽全局變量數組的問題


記錄在小程序項目實現的時候出現的小問題:

在其他組件中如何監聽到全局變量為數組的改變,而作出回調。使用場景為:在商品詳情頁面添加商品至全局變量數組里,而購物車組件需要監聽到這個全局變量的更改,做出回調。

想到的思路:主動回調、使用watch函數監聽全局變量(查詢了下小程序官方提供的拓展computed好像不能監聽全局屬性,只好自行定義)

主動回調:

在需要回調的組件中,全局對象app添加回調函數。當回調函數的時候就會執行這里的函數

// 設置添加購物車回調函數
app.addCartCallBack = () => {
   this._getCartList()
}

在修改全局變量的地方,執行回調函數

addCart(good) {
  const isHave = this.globalData.cartList.find(item => {
    return item.iid === good.iid
  })
  if (isHave) {
    isHave.count++
  } else {
    good.count = 1
    good.check = false
    this.globalData.cartList.push(good)
  }
  // this.globalData.num = ["1"]
  console.log(this.globalData.num)
  if (this.addCartCallBack) {
    // 執行回調
    this.addCartCallBack()
  }
}    

watch監聽全局變量:

使用Object.defineProperty()方法,執行對象的 getter/setter方法來判斷屬性是否改變,如改變則執行回調

 
         
 // 全局屬性
 globalData: {
  num: []
 },
// 定義watch函數監聽全局屬性
watch(method){
  var obj = this.globalData
  Object.defineProperty(obj, 'num', {
    configurable: true,
    enumerable: true,
    set: function (value) {
      this._name = value;
    // 執行傳入參數的回調函數 method(value); },
get: function () { return this._name } }) }

然后,在回調的地方執行app.watch方法且傳入回調函數

// 執行watch
  const watchCallBack = (value) => {
    console.log(value)
  }
  app.watch(watchCallBack)

最后發現watch只能監聽已存在的屬性,監聽不了數組中的push、pop方法

只能采取主動回調的方法實現了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM