vuex中module的命名空間概念
-
默認情況下,模塊內部的 action、mutation 和 getter 是注冊在全局命名空間的。
- 弊端1:不同模塊中有相同命名的mutations、actions時,不同模塊對同一 mutation 或 action 作出響應。
- 弊端2:當一個項目中store分了很多模塊的時候,在使用輔助函數mapState、mapGetters、mapMutations、mapActions時,很難查詢,引用的state、getters、mutations、actions來自於哪個模塊,不便於后期維護。
-
可以通過添加
namespaced: true
的方式使其成為帶命名空間的模塊。當模塊被注冊后,它的所有 getter、action 及 mutation 都會自動根據模塊注冊的路徑調整命名。-
在模塊中添加 namespaced: true, 開始命名空間
-
在根store中引入模塊並掛載
-
組件中使用模塊中定義的“permissionList” state
-
第一種方式
// 1. 導入輔助函數mapState import { mapState } from "vuex"; export default { props: { data: { type: Object, default: "chart" } }, data() { return { list: {} }; }, computed: { //2. 在輔助函數mapState的第一參數上,填寫上模塊的命名空間名。根據掛載方式不同,此處的命名空間名就是 wechatType 或 aaa。 ...mapState('命名空間名', ["permissionList"]) },
-
第二種方式
//通過使用 createNamespacedHelpers 創建基於某個命名空間輔助函數。 //它返回一個對象,對象里有新的綁定在給定命名空間值上的組件綁定輔助函數 import { createNamespacedHelpers } from "vuex"; const { mapState } = createNamespacedHelpers('命名空間名') export default { computed: { ...mapState(["permissionList"]) } }
-
-