vue如何批量引入组件、注册和使用详解


Posted in Vue.js onMay 12, 2021

前言

组件是我们非常常用的东西,很多人使用组件都是通过一个一个文件去引用和注册。这篇文章就来介绍下vue批量引入组件、注册和使用的方法。

一、使用场景

在日常开发中,经常会有这样一种情况:

import A from 'components/A'
	import B from 'components/B'
	import C from 'components/C'
	import D from 'components/D'

遇到这种重复的代码,就在想,是否可以进行以下优化,一次性全部引入。于是就找到了webpack的api,通过调用require.context来进行处理,具体代码如下:

二、使用步骤

涉及到:

  • 组件名称为带中横线规范,最后要转为驼峰命名法的功能;
  • component的is属性;

具体详解都在代码中:

1.文件目录

vue如何批量引入组件、注册和使用详解

2.HTML代码

<template>
  <div class="water-analysis">
    <div class="content-box" ref="contentbox">
      <a-tabs :default-active-key="activeComponent" @change="tabChangeHandle">
        <a-tab-pane
          v-for="item in tabList"
          :key="item.key"
          :tab="item.tab"
        ></a-tab-pane>
      </a-tabs>
      <div class="tab-pane-box">
      	<!-- 通过is属性,绑定对应的组件名称,展示对应的组件 -->
        <component :is="activeComponent"></component>
      </div>
    </div>
  </div>
</template>

3.js代码

语法:require.context(directory, useSubdirectories, regExp)

  • directory: 要查找的文件路径
  • useSubdirectories: 是否查找子目录
  • regExp: 要匹配文件的正则

返回值:两个方法一个属性

  • keys(): 返回匹配成功模块的名字组成的数组
  • resolve(): 接受一个参数request,request为test文件夹下面匹配文件的相对路径,返回这个匹配文件相对于整个工程的相对路径
  • id:执行环境的id,返回的是一个字符串,主要用在module.hot.accept,应该是热加载
<script>
// 中横线转驼峰
var camelCase = function (s) {
  return s.replace(/-\w/g, function (x) {
    return x.slice(1).toUpperCase();
  });
};
// 批量引入子组件  重点,语法见上
const allComponents = require.context("./comp", false, /\.vue$/);

console.log(allComponents.keys())
// ["./tem-a.vue", "./tem-b.vue", "./tem-c.vue", "./tem-d.vue"]

console.log(allComponents.id)
//./src/views/tempManage/comp sync \.vue$

//制作组件数组,在下方components中注册使用
let resComponents = {};
allComponents.keys().forEach(comName => {
  let name = camelCase(comName);
  const comp = allComponents(comName);
  resComponents[name.replace(/^\.\/(.*)\.\w+$/, "$1")] = comp.default;
});

export default {
  name: "WaterQuery",
  components: resComponents,
  data() {
    return {
      activeComponent: "temA",
      tabList: [
        {
          key: "temA",
          tab: "A组件",
        },
        {
          key: "temB",
          tab: "B组件",
        },
        {
          key: "temC",
          tab: "C组件",
        },
        {
          key: "temD",
          tab: "D组件",
        },
      ],
    };
  },
  created() {
    if (this.$route.query["val"]) {
      this.activeComponent = this.$route.query["val"];
    }
  },
  methods: {
    // 切换tab栏
    tabChangeHandle(val) {
      const {path} = this.$router;

      this.$router.push({
        path,
        query: {val},
      });
      this.activeComponent = val;
    },
  },
};
</script>

4.css代码(可不看,写出来只是为了代码完整性,拿来可以直接运行展示)

<style scoped>
.water-analysis {
  height: 100%;
  overflow: auto;
}
.content-box {
  height: 100%;
}
.tab-pane-box {
  height: calc(100% - 62px);
}
</style>

三、总结

到此这篇关于vue如何批量引入组件、注册和使用的文章就介绍到这了,更多相关vue批量引入组件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 Vue.js
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 Vue.js
Vue仿百度搜索功能
Dec 28 Vue.js
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
详解Vue2的diff算法
Jan 06 Vue.js
vue穿梭框实现上下移动
Jan 29 Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
vue配置型表格基于el-table拓展之table-plus组件
Apr 12 Vue.js
vue/cli 配置动态代理无需重启服务的方法
May 20 Vue.js
vue组件的路由高亮问题解决方法
Vue通过懒加载提升页面响应速度
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
如何使用vue3打造一个物料库
vue完美实现el-table列宽自适应
You might like
做个自己站内搜索引擎
2006/10/09 PHP
详解js异步文件加载器
2016/01/24 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
2016/06/01 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
python实现SMTP邮件发送功能
2020/06/16 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
中科前程Java笔试题
2016/11/20 面试题
会计电算化专业应届大学生求职信
2013/10/22 职场文书
法学专业毕业生自荐信范文
2013/12/18 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
2014年国培研修感言
2014/03/09 职场文书
职工小家建设活动方案
2014/08/25 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
初中成绩单评语
2014/12/29 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript