javascript - vue.js 中多个导入和注册的组件
问题描述
我正在重构我的应用程序中的一些代码,结果发现,下面的逻辑在许多组件中重复出现。
import component1 from '...'
import component2 from '...'
import component3 from '...'
//...many others
export default {
//other data
components: {
component1,
component2,
component3
//...
}
}
是否存在更短的方法来清理我的代码?谢谢你的时间
解决方案
以下是3种方法。顺便说一下,我更喜欢方法3。
方法一
在我的情况下创建一个js
文件dynamic_imports.js
:
export default function (config) {
let registered_components = {}
for (let component of config.components) {
registered_components[component.name] = () => System.import(`../${config.path}/${component.file_name}.vue`)
}
return registered_components
}
在您有许多组件导入和注册的组件中
import dynamic_import from '@/services/dynamic_imports' //importing the above file
let components = dynamic_import({
path: 'components/servers',
components: [
{ name: 'server-one', file_name: 'serverOne' },
{ name: 'server-two', file_name: 'serverTwo' },
]
})
export default {
//...other code
components: components
}
因此,您将使用“干净代码”导入和注册您的组件。但请注意,这对我有用,也许它必须修改一点以满足您的需求,以了解:
该属性path
意味着将查看此路径中指定的名称file_name
。该name
属性是您注册组件的名称
方法2 如果您不喜欢上面的方法,请看下面的另一种方法:
function import_component(cmp_name){
return System.import(`@/components/${cmp_name}.vue`);
}
export default{
components: {
'component1': () => import_component('componentOne'),
'component2': () => import_component('componentTwo'),
'component3': () => import_component('componentThree')
}
}
方法3 如果你再次说:这不是一个更干净的方法,请看下面,但请记住,如果你是在团队中工作并且技能不同,那么一些程序员会有点困惑。
动态导入.js
export default function ({path, file_names, component_names}) {
let registered_components = {}
for (let [index, file_name] of file_names.entries()) {
registered_components[component_names[index]] = () => System.import(`../${path}/${file_name}.vue`)
}
return registered_components
}
在您的组件中
import dynamic_import from '@/services/dynamic_imports'
let components = dynamic_import({
path: 'components/servers',
file_names: ['serverOne', 'serverTwo'],
component_names: ['server-one', 'server-two']
})
export default {
components: components
}
推荐阅读
- arrays - 检查我的指针字符串数组是否为整数
- c# - 使用 okhttpclient 设置双向 TLS
- pandas - Pandas - 在多个数据帧的同一列中查找唯一值
- mysql - 在 MySQL 中按数字选择行
- excel - 使用 For Each 循环(VBA Excel)向一行中的每个单元格添加注释
- http - 保护服务器到服务器 api 调用
- swift - 无法将 UITableView 更改为编辑模式并再次返回
- encryption - 使用 Widevine 解密 url 解密 mpeg dash 实时流并使用 ffmpeg 重新流
- java - 如何测试访问父目录的url?
- java - 多重继承的替代设计