微信小程序數(shù)據(jù)監(jiān)聽

iOS數(shù)據(jù)監(jiān)聽很簡單,比如登錄成功之后首頁、個人中心頁等很多頁面都需要更新數(shù)據(jù),只需要首頁和個人中心頁注冊通知,登錄成功之后發(fā)送通知,首頁和個人中心頁就能接收到該通知,此時就可以更新數(shù)據(jù)及界面,退出登錄同理。
小程序更新頁面數(shù)據(jù)就比較費勁,之前我都是獲取上級頁面,然后調用上級頁面自定義方法loadNewData方法來刷新上級頁面數(shù)據(jù)。

//更新上級頁面
var pages = getCurrentPages()
var prevPage = pages[pages.length - 2] //上一個頁面
prevPage.loadNewData() 

這種方法說實話也挺好用的,但是只能更新 wx.navigateTo打開的頁面。
官方也有頁面間通信方法EventChannel,同樣只能和wx.navigateTo打開的頁面進行通信。
今天遇到的需求是tabbar切換的頁面更新首頁列表數(shù)據(jù),只能各種百度,最終也實現(xiàn)的功能。

// 監(jiān)聽方法
watch: function (callback) {
  var obj = this.globalData

  Object.defineProperty(obj, "reloadIndex", {
    configurable: true,
    enumerable: true,
    set: function (value) { //set方法
      this._reloadIndex = value
      callback(value)
    }
  })
},

globalData: {
  reloadIndex: false //刷新首頁
}

在首頁調用

const app = getApp()

onLoad: function (options) {
  app.watch(this.loadNewData)
}

在其他頁面修改reloadIndex的值

// 刷新首頁列表
reloadIndexList: function () {
  app.globalData.reloadIndex = true
}

小程序組件有數(shù)據(jù)監(jiān)聽器,也實現(xiàn)了某個功能。

/**
 * 數(shù)據(jù)監(jiān)聽器
 */
observers: {
  // 監(jiān)聽語音消息播放狀態(tài)
  'message.audioPlay': function (audioPlay) {
    if (audioPlay == 1) {
      this.beginAudioAnimation()
    } else if (audioPlay == 0) {
      this.endAudioAnimation()
    }
  }
}

參考文章:
小程序實現(xiàn)數(shù)據(jù)監(jiān)聽
小程序如何在其他頁面監(jiān)聽globalData中值的變化?
微信小程序設置簡單的監(jiān)聽器

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容