vue动态加载组件
在工作中遇到这么一个需求,就是根据所选的数据,动态显示对应的组件。
当时就不想引入import一堆的组件,想传入组件名就能显示组件,百度之后果然找到对应的方法,那就是require.context。
由于涉及到业务,所以我就创建一个简单的demo,能看到怎么使用即可。先看一下项目结构,如图1所示。

图1 目录结构图
看一下index.js里的内容,代码如下:
const resultComps = {} let requireComponent = require.context( './', // 在当前目录下查找 false, // 不遍历子文件夹 /\.vue$/ // 正则匹配 以 .vue结尾的文件 ) requireComponent.keys().forEach(fileName => { let comp = requireComponent(fileName) resultComps[fileName.replace(/^\.\/(.*)\.\w+$/, '$1')] = comp.default }) export default resultComps
在需要引入组件的vue页面引入index.js,我以Appvue为例,代码如下:
<template>
<div id="app">
<div style="line-height: 50px;">
俺是父组件
</div>
<div>
这是引入的子组件:
<div style="line-height: 50px;border: 1px red solid;">
<component v-for="comp in comps" :key="comp.id" :is="allComps[comp]"></component>
</div>
</div>
</div>
</template>
<script>
import allComps from './components/index.js'
export default {
name: 'app',
data() {
return {
// 此处组件名即文件名
comps: ['demo1', 'demo2', 'demo3'],
allComps: allComps
}
}
}
</script>
<style></style>
效果如图2所示

图2 演示图
本篇到此就结束了

浙公网安备 33010602011771号