mpvue 無法獲取$store的問題


在開發的時候,我們喜歡將一些公共的方法,屬性,放在一個特定的位置,例如在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頁面上也能及時得到改變。

                             


免責聲明!

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



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