在開發的時候,我們喜歡將一些公共的方法,屬性,放在一個特定的位置,例如在mpvue開發小程序的時候,
我們將其放在 vue提供的store里面,或者在mainjs中通過Vue.prototype.xxx=xxxxxxxxxx在Vue的原型上擴展屬性或方法。
經過發現:我們使用store的時候,習慣將Vue.$prototype.store = store,問題就出在這里,小程序中:在每一個頁面的template部分,采用{{$store.state.xx}}在界面上不會有任何呈現,但是在H5中顯示是正常的,
說明mpvue在編譯的過程中可能沒有在對應的小程序的頁面上解析this.$store,但是在數據層(js上),我們如果采用 this.aa = this.$store.state.xxx是可以正確訪問和賦值的(這點比較重要),aa放在頁面上也沒有問題,但是這樣的就失去了 ‘全局’的意義;
由於 this.aa = this.$store.state.xxx是一次性賦值,對於常量這類非引用類型, 在下一次 this.$store.state.xxx發生變化的話,我們將無法觸發this.aa的更新!! 需要手動再次賦值,所以很麻煩。
解決辦法:1,針對於頁面不多的情況下,每個頁面引用store;
2,上述可能麻煩,為了促發數據層的更新。我們可以采用computed,在mainjs中聲明一個mixin(不會mixin的同學們請參看https://cn.vuejs.org/v2/api/#Vue-mixin);
computed會在內部的 store更新(首先是因為上述的這句(在數據層,我們如果采用 this.aa = this.$store.state.xxx是可以正確訪問和賦值的))
代碼如下:
import store from './store' Vue.prototype.$store = store; Vue.mixin({ computed: { network: function() { return this.$store.state.network; }, } })
那么我們就可以在任何一個頁面間接的使用store了,在A頁面改變store中的值,那么B頁面上也能及時得到改變。