【vue2小知识】实现store中modules模块的封装与自动导入

简介: store仓库中分模块时的需要每次导入index的问题

【前言】在store中如何简化我们的模块导入进index的操作?

我们在平常使用vuex存储我们公共数据资源的时候,如果将所有的共享数据都统一的写在store文件夹下的index中,那么这样的话我们的共享数据可能会非常的多,处理数据的时候也不方便处理。因此我们通常是将我们的共享数据按照我们的模块来进行划分。平常的划分模式是直接通过import引入到index达到store仓库中实现数据共享的问题。

本文阅读完可实现modules中书写的各模块会自动导入到我们的store的index文件中

关于vuex的知识可查看:http://t.csdn.cn/9VTx7

一、创建我们的模块名

store/modules/menu等等(本文演示模块为下图所示)

有app、menu、settings、user四个模块

0496acc1660a403f9b590f800212ecd9.png

二、在我们的index中使用require.context()方法

1.require.context()方法介绍

参数有三个分别为:

  1. 要搜索的文件夹路径
  2. 是否开启递归搜它的子目录
  3. 正则的匹配

理论结束,开始我们的实操

2.引入我们的数据源

a26793507f73437a8b017dfe24892fd9.png

我们先查看一下我们调用这个方法我们打印的是什么?

5b8a35f11e464aba9d75f0fbee5843b7.png

发现req就是我们写的这个方法,req.keys()为我们路径下符合条件的对象构成的数组

3.用方法来提取修改我们的数据

60281caf5c3c4bc68e49f557a647829a.png

控制台查看我们打印的数据

216d987a993c4ca38e0f8a52c16786a8.png

这样我们就提取出来了我们的模块名(mName),与我们所有的模块(map)注意我们的每项数据在default中

4.数据的整合

开始创建一个对象来接收我们的数据

7e36763377fc42e2a6b515e55a4c52cf.png

可以看到我们这就提出出来了我们的数据,以模块名为键,以各模块的内容为值

4bfbb368a5ad40c9b46c238aebbf6362.png

随后直接导入到store中即可

b21b4170052241cea2f24e72ee86991f.png

三、效果查看

9f82e0d92ece462a826db8b5a21e9d74.png0096f6ba5cea47b197318b0680fdda6c.png

我们在页面访问可获取的我们存放在vuex中的值:

45943e5e25174a309d4ccc4400c9922f.png

【上述我们的index源代码】

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const req = require.context('./modules', false, /\.js$/)
console.log(req, 'req')
console.log(req.keys(), 'req.keys()')// 模块名的数组
// 打印出模块名
const mName = req.keys().map(item => item.split('./')[1]).map(item => item.split('.js')[0])
console.log(mName, 'mName')
console.log(req.keys().map(req), 'map')// 所有的modules组成的列表
// 遍历模块添加到obj中
const obj = {}
const mMoudle = req.keys().map(req)
mName.forEach((item, index) => {
  obj[item] = mMoudle[index].default// 每一个对象
})
console.log(obj, 'obj')
const store = new Vuex.Store({
  modules: obj,
})
export default store

以上便是实现自动封装modules数据的方法啦!


相关文章
|
7月前
|
JavaScript
Vue状态管理:在Vuex中,什么是模块(module)?
Vue状态管理:在Vuex中,什么是模块(module)?
56 1
|
JavaScript 测试技术 API
vue項目加入单元测试模块,使用jest
vue項目加入单元测试模块,使用jest
119 0
|
2月前
|
JavaScript
如何在 Vue 项目中选择合适的模块格式
【10月更文挑战第20天】选择合适的模块格式需要综合考虑多个因素,没有一种绝对正确的选择。需要根据项目的具体情况进行权衡和分析。在实际选择过程中,要保持灵活性,根据项目的发展和变化适时调整模块格式。
21 7
|
1月前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
2月前
|
JavaScript 前端开发 编译器
在 Vue 项目中使用 ES 模块格式的优点
【10月更文挑战第20天】在 Vue 项目中使用 ES 模块格式具有众多优点,这些优点共同作用,使得项目能够更高效、更可靠地开发和运行。当然,在实际应用中,还需要根据项目的具体情况和需求进行合理的选择和配置。
37 6
|
1月前
|
缓存 JavaScript UED
Vue 中异步加载模块的方式
【10月更文挑战第23天】这些异步加载模块的方式各有特点和适用场景,可以根据项目的需求和架构选择合适的方法来实现模块的异步加载,以提高应用的性能和用户体验
|
1月前
|
JavaScript 测试技术 UED
解决 Vue 项目中 Tree shaking 无法去除某些模块
【10月更文挑战第23天】解决 Vue 项目中 Tree shaking 无法去除某些模块的问题需要综合考虑多种因素,通过仔细分析、排查和优化,逐步提高 Tree shaking 的效果,为项目带来更好的性能和用户体验。同时,持续关注和学习相关技术的发展,不断探索新的解决方案,以适应不断变化的项目需求。
|
2月前
|
JavaScript
vue尚品汇商城项目-day03【16.开发Search组件模块中的TypeNav商品分类菜单(过渡动画效果)+17.(优化)针对三级菜单联动进行优化,优化方向为减少查询】
vue尚品汇商城项目-day03【16.开发Search组件模块中的TypeNav商品分类菜单(过渡动画效果)+17.(优化)针对三级菜单联动进行优化,优化方向为减少查询】
36 0
|
5月前
|
开发框架 JavaScript 前端开发
基于Vue的工作流项目模块中,使用动态组件的方式统一呈现不同表单数据的处理方式
基于Vue的工作流项目模块中,使用动态组件的方式统一呈现不同表单数据的处理方式
|
7月前
|
JavaScript 前端开发
vue的论坛管理模块-文章评论02
vue的论坛管理模块-文章评论02