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中音频wavesurfer.js的使用方法
Feb 20 Vue.js
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
vue el-upload上传文件的示例代码
Dec 21 Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
vue3中provide && inject的使用
Jul 01 Vue.js
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
vue中 this.$set的使用详解
Nov 17 Vue.js
详解Vue3使用axios的配置教程
Apr 29 Vue.js
vue实现在data里引入相对路径
Jun 05 Vue.js
vue组件的路由高亮问题解决方法
Vue通过懒加载提升页面响应速度
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
如何使用vue3打造一个物料库
vue完美实现el-table列宽自适应
You might like
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
JavaScript跨域方法汇总
2014/10/16 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
jQuery实现弹出层效果
2019/12/10 jQuery
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
如何做好总经理助理
2013/11/12 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
中国梦口号
2014/06/13 职场文书
文秘自荐信
2014/06/28 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
员工旷工检讨书
2015/08/15 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers