vuex與eventbus


 是什么

 vuex是專門為vue.js開發的狀態管理模式

它解決的多個組件依賴同一個狀態的情況,適用於在單頁面中,跨組件狀態管理,登錄狀態管理,購物車管理等等

相對而言結構比較復雜,對於簡單頁面沒必要使用 

 

eventBus又稱事件總線,他使用的事訂閱發布模式,一般於vue的prototype上注冊一個事件中心,用於接收事件已經發送事件,以便全局使用

但是他又有一個比較嚴重的問題,維護困難,因為他沒有明確可維護的列表,完全是定義了什么,才能用什么,一旦不是原開發者維護(甚至原開發者)會一團亂麻

 

 怎么用

 vuex包含了五個屬性

1.state,數據存儲,也就是vuex中狀態管理中的狀態

2.getters,可以理解為vuex中的計算屬性,可以對sate進行簡單的運算后返回,並且實時監聽數據的狀態,在多模塊的vuex結構中也經常用於直接獲取對應模塊的值

3.mutations,數據操作,也就是vuex狀態管理的的管理,所有直接操作state的方法都在這里,所有變更state的方式都必須經過mutations,觸發執行mutations的方法是commit的方法

4.actions,異步操作,mutaions一般用於直接操作state,而actions則是在異步請求獲取數據后執行commit修改state的值,觸發actions的方法是dispath

5.modules,模塊,當數據量大的時候,僅僅使用一張表也一樣不好管理,因此出現了模塊化

   要注意,模塊內部基本與外部結構一致,但不同的地方有,

   1)namespace屬性,這會讓他成為帶命名的空間模塊,模塊內容不的state,getters,mutation,actions都會自動注冊模塊路徑,當他為false時,module的內容與根目錄的內容就等於根目錄上的內容

   2)mutations和actions的函數的參數多了context.rootState,context.rootGetters訪問根目錄數據

   3)dispatch,commit可以傳遞第三個參數為{root:true},在根目錄開始觸發,

dispatch('vip/get', data, {root: true}) 

 

   4)mutations和actions想在具名模塊里注冊全局action

 

      actions: {
        someAction: {
          root: true,
          handler (namespacedContext, payload) { ... } // -> 'someAction'
        }
      }

 

 

 6,modules是可以在store創建之后追加上去

import Vuex from 'vuex'

const store = new Vuex.Store({ /* 選項 */ })

// 注冊模塊 `myModule`
store.registerModule('myModule', {
  // ...
})
// 注冊嵌套模塊 `nested/myModule`
store.registerModule(['nested', 'myModule'], {
  // ...
})

 

 

 

 

 

eventBus的使用方法

import Vue from 'vue'
Vue.prototype.$EventBus = new Vue()

//訂閱
this.$EventBus.$on('xxx',(text)=>{
    console.log(text)
})

//發布
this.$EventBus.$emit('xxx',666)

 


免責聲明!

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



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