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