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 相关文章推荐
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
vue中配置scss全局变量的步骤
Dec 28 Vue.js
vue中使用echarts的示例
Jan 03 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
vue使用transition组件动画效果的实例代码
Jan 28 Vue.js
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
ant design vue的form表单取值方法
Jun 01 Vue.js
vue el-table实现递归嵌套的示例代码
Aug 14 Vue.js
vue组件的路由高亮问题解决方法
Vue通过懒加载提升页面响应速度
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
如何使用vue3打造一个物料库
vue完美实现el-table列宽自适应
You might like
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
很可爱的输入框
2008/08/03 Javascript
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
微信小程序实现红包雨功能
2018/07/11 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
python实现教务管理系统
2018/03/12 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
Python之修改图片像素值的方法
2019/07/03 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
白色公司:The White Company
2017/10/11 全球购物
餐饮收银员岗位职责
2014/02/07 职场文书
工程安全员岗位职责
2014/03/09 职场文书
新农村建设典型材料
2014/05/31 职场文书
python实现批量移动文件
2021/04/05 Python