当前位置: 代码网 > it编程>前端脚本>Vue.js > vue require.context全局注册组件的具体实现

vue require.context全局注册组件的具体实现

2024年05月26日 Vue.js 我要评论
​ 作用:一个webpack提供的 api 方法,通过require.context()函数可以获取一个上下文,通常用来简化大量频繁的引入组件操作。​require.context()接收三个参数:d

​ 作用:一个 webpack 提供的 api 方法,通过 require.context() 函数可以获取一个上下文,通常用来简化大量频繁的引入组件操作。​

 require.context() 接收三个参数:

  • directory:要查找的目录路径
  • isfindsub?:是否查找子目录
  • regexp:要匹配的文件正则表达式
const req = require.context('./component',true,/\.vue$/)

过程:require.context() 执行后会返回一个 req 对象,该 req 对象中存在有一个 keys() 方法成员,

keys() 文件路径数组
​ 作用:它会返回一个 require.context() 方法在指定目录下查找到的所有文件路径数组。

const req = require.context('./component',true,/\.vue$/)

console.log(req.keys()) 
// ['./component/svgicon.vue','./component/form/login.vue','./component/channel.vue'...]

req.keys().foreach(item => {
    ...
})

在拿到所有待注册组件的文件路径之后,便可以传给 req 对象本身进行一个 import 解构导出操作。

一、定义2个组件

scr/components/componentsa/index.vue

<template>
  <div>a组件</div>
</template>
<script>
export default {
  name: 'componenta'
}
</script>

scr/components/componentsb/bbb/bbbb/index.vue

<template>
  <div>b组件</div>
</template>
<script>
export default {
  name: 'componentb'
}
</script>

二、局部使用这两个组件

<template>
  <div id="app">
    <componenta />
    <componentb />
  </div>
</template>
<script>
import componenta from '@/components/componenta'
import componentb from '@/components/componentb/bbb/bbbb'
export default {
  components: { componenta, componentb }
}
</script>

三、全局注册组件

如果这2个组件是基础性的组件,项目中好多地方都要用到,可以注册成全局组件

src/requireallcomponents.js

import vue from 'vue'

const componentscontext = require.context('@/components', true, /index.vue$/) // true表示递归查找 正则匹配index.vue文件

componentscontext.keys().foreach(item => {
  const componentconfig = componentscontext(item).default
  vue.component(componentconfig.name, componentconfig) // 全局注册组件
})

main.js

import './requireallcomponents'

此时,便不再需要在每个组件中都引入这种基础组件了

到此这篇关于vue require.context全局注册组件的文章就介绍到这了,更多相关vue require.context全局注册组件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com