Vue动态加载 Vuex

2023-10-18 帮手 By:一嘉子

Vue 动态加载 Vuex

你可能已经知道 Vuex,如果不是的话 Joshua Bemenderfer 在下面为我们很好的 介绍它。

你可以像下面这样定义 Vuex store 模块:

const dogs = {  state: {    data: []  },  mutations: {    addDog(state, dog) {      state.data.push(dog)    }  }}const store = new Vuex.Store({  modules: {    dogs  }});

通常一个大型应用都会有很多个模块,所有模块都定义在自己的文件中,并通过调用 new Vuex.Store 时结合在一起。这也是你一般的处理方法。

但可能会有一个特殊情况,你需要将 Vuex 模块动态地加载到你的应用程序中,从而扩展到当前的 store 中。

一个比较具体的例子就是编写一个依赖于 Vuex 的外部组件库。

这同样适用于分为几个内部软件包的应用程序。每个包,可能有自己的组件 和储存。

通常,在应用程序中这是常见的可重用的模块。例如, 一个 notifications 模块提供一些通知组件以及一个 store 模块扩展你的应用程序存储, 这样在你的应用程序中添加一个新的模块在任何一个地方都可以访问。

让我们一起来看看它是怎样实现的吧。

动态为存储新增模块

因为我们使用了 Vuex 的一般设置,接下来我们创建一个 notifications 文件夹,你可以放在任意位置,想象他是一个外设的扩展。

在此文件夹下新建 state.js 文件作为我们的 Vuex 模块:

export default {  state: [],  mutations: {    addNotification(state, notification) {      state.push(notification);    }  }};

然后创建一个 Notifications.vue 文件并导入。然后您将访问 $store 实例变量,假设有一个 Vuex 存储来获取来获取状态,并提交一个addNotification

<template>  <p>    <p v-for="notification in notifications">      {{notification}}    </p>    <button @click="addHey">Add Hey!</button>  </p></template><script>import state from "./state";export default {  computed: {    notifications() {      return this.$store.state.notifications;    }  },  methods: {    addHey() {      this.$store.commit("addNotification", "Hey!");    }  }};</script>

现在,我们的想法是,当使用组件时, Vuex 模块会自动添加通知。这样,如果外部应用程序使用组件,它将会被打包进来,而应用程序无需关心直接添加它,所以我们可以使用 created 钩子。

并且,为了动态添加 Vuex 模块, 我们可以使用 store’s 的实例属性 $store.registerModule

import state from "./state";export default {  // ...  created() {    this.$store.registerModule("notifications", state);  }};

现在,当使用 Notifications 组件时,模块将被自动注册。

包起来

大型应用程序中的 Vuex 存储是通过不同模块静态组织的。应该是这样的。但是在非常特殊的情况下,您可能需要扩展存储并自己添加一个模块。

推荐教程:《JS教程》

展开全文
猜你感兴趣
关于爱的名言 关于爱的名人名言 关于爱的名言

关于爱的名言 关于爱的名人名言 关于爱的名言

1、爱,可以创造奇迹乔迈被摧毁的爱,一旦重新修建好,就比原来更宏伟,更美,更顽强。——莎士比亚2、爱叫懦夫变得大胆,却叫勇士变成懦夫。——莎士比亚3、真诚的爱在奉献的时候最为丰富。——盖贝尔4、爱别人,也被别人爱,这就是

11-10 351阅读
白头鹎可以家养吗 饲养白头鹎吃什么 白头鹎鸟蛋如何孵化

白头鹎可以家养吗 饲养白头鹎吃什么 白头鹎鸟蛋如何孵化

1、白头鹎可以家养,鹎科鸟类多食虫、兼食果实,较难达到人工繁殖。2、一般饲养白头鹎是为听其悦耳鸣声,故多选择雄鸟。白头鹎雌雄羽色相似,较难区分。有经验的人可根据雄鸟胸部灰色较深,雌鸟浅淡,雄鸟枕部白色清晰,雌鸟稍发污等特

11-10 396阅读
巴黎圣母院是什么建筑 巴黎圣母院是哥特式的建筑 巴黎圣母院是什么建筑

巴黎圣母院是什么建筑 巴黎圣母院是哥特式的建筑 巴黎圣母院是什么建筑

1、巴黎圣母院是一种哥特式的建筑,它的建筑风格也比较独特,也是欧洲建筑史上的一个重要标志。2、巴黎圣母院大教堂(Cathédrale Notre Dame de Paris)是一座位于塞纳河畔、法国巴黎市中心、西堤岛上的

11-10 347阅读
巴沙鱼的做法 做巴沙鱼的步骤 如何做巴沙鱼

巴沙鱼的做法 做巴沙鱼的步骤 如何做巴沙鱼

1、做法:巴沙鱼洗净后,斜刀切成薄片,不能切得太薄,容易碎掉。鱼片中加入适量的淀粉、蛋清、黑胡椒、料酒和盐,抓匀腌渍10分钟。2、准备好配料:干红辣椒段花椒粒、姜片和葱段。锅中放油,加入花椒粒小火炒至出麻香味。3、加入葱

11-10 460阅读
剖析JavaScript中8个常见的陷阱

剖析JavaScript中8个常见的陷阱

这里我们针对JavaScript初学者给出一些技巧和列出一些陷阱。如果你已经是一个砖家,也可以读一读。1. 你是否尝试过对数组元素进行排序?JavaScript默认使用字典序(alphanumeric)来排序。因此,[1

10-18 340阅读
JS家的排序算法  前端

JS家的排序算法 前端

当年,想凭借抱Java大腿火一把而不惜把自己名字给改了的JavaScript(原名LiveScript),如今早已光芒万丈。node JS的出现更是让JavaScript可以前后端通吃。虽然Java依然制霸企业级软件开发

10-18 432阅读