需求
公共組件A改變頁面B的屬性isShow的值。
思路
首先目前我不了解可以直接在組件中改變頁面的值的方法,所以我通過監聽的方式在B頁面監聽app.js的某一屬性值的改變從而改變B頁面的值,眾所周知app.js的某一屬性值是很容易就能更改的。
app.js
globalData: {isShow: false},//給app.js中被監聽的值賦初始值// 使用數據劫持模式監聽數據變化observe(obj, key, watch, that) {let val = obj[key];Object.defineProperty(obj, key, {configurable: true,enumerable: true,set: function (value) {watch(val, value, that);val = value;},get: function () {return val;}})}
B頁面
data:{isShow:false},//在onReady中調用app.js的observe,并且傳參,第二個參數為要監聽的app.js的屬性值onReady() {const app = getApp()app.observe(app.globalData, "isShow", this.watch, this);},watch(oldVal, newVal, that) {that.setData({isShow: newVal//監聽后得到新的值,并將新的值賦值給頁面的這個我們要改變的這個屬性})}
A組件
組件中只需要在你需要改變頁面值的時候改變一下app.js的所被監聽的這個屬性的值即可。
getApp().globalData.isShow = true