Vue 批量注册局部组件及应用
批量注册路由的有个博客说到:https://ainyi.com/77
实际工作中,可能会遇到一个大页面里面有很多个模块,这些模块一般是需要拆分到单独的组件中,然后父组件再引入
我最近就遇到一个可以拆分成 10 个模块的大表单页面,拆分成局部组件后还是得一个个导入、声明,最后在 template 应用。作为一个程序员,我们怎么能写这么一大段重复的代码呢啊哈哈哈哈
所以就来搞搞局部组件批量注册和批量应用吧
如图,一个 Index.vue 文件中需要引入 modules 里面 10 个子组件
注册
先扫描读取目录下每个文件,如有需要过滤的组件标出,再批量注册
const requireComponent = require.context('./modules', false, /\w+\.(vue|js)$/)
const cmps = {}
// 这里我把 CreateHeader 组件排除,单独引入
const filterCmps = ['./CreateHeader.vue']
requireComponent.keys().forEach(fileName => {
let cmp = requireComponent(fileName).default
!filterCmps.includes(fileName) && (cmps[cmp.name] = cmp)
})
export default {
components: {
createHeader: () => import('./modules/CreateHeader'),
...cmps
},
data() {
return {
// 这里做了排序处理,每个组件的 name 命名为 xxx_${index}
componentList: Object.keys(cmps).sort(
(a, b) => a.split('_')[1] - b.split('_')[1]
)
}
}
}
应用
template 应用手写每个组件也几乎不可能了,太多了
上面 componentList 做了排序处理,按照原型图的顺序命名组件的 name:xxx_${index}
有顺序了,这里就可以使用 component、is 依次循环应用
如果每个组件的位置不是排列在一起的,那就单独一个个写吧
<template>
<div class="krry-appointment">
<create-header :active="active" :translate="translate"></create-header>
<div class="form-content">
<component v-for="ele in componentList" :key="ele" :is="ele"></component>
</div>
</div>
</template>
这样就大功告成,是不是简化了很多代码~
Vue 批量注册局部组件及应用的更多相关文章
- vue 自动注册全局组件
vue 自动注册全局组件 vue 注册全局组件的方式 const plugins = { install(Vue) { const requireComponent = require.context ...
- VUE注册局部组件
// 局部组件命名规范 /* 1文件夹名大驼峰 MyLocalBtn.vue 2 使用的时候 将驼峰转化为横杠 <my-local-btn></my-local-btn> */ ...
- Vue动态注册异步组件(非同一个工程的组件)
前言:最近在掘金逛的时候,无意中看到前滴滴前端架构黄轶大佬,看到了大佬分享的一篇博客滴滴 webapp 5.0 Vue 2.0 重构经验分享 ,对于其中第5个问题(异步加载的业务线组件,如何动态注册? ...
- vue 中注册全局组件
1 全局注册组件 建一个 js 文件, 注册全局组件, 并且暴露出去 然后再在 main.js 中引入 在页面就可以直接使用了 2 全局注册过滤器 建立文件, 包含所有过滤器方法 ...
- Vue自动化注册全局组件脚本
今天有一个idea,vue一些组件,可能会全局都用到,我觉得在main.js写 Vue.component(name, instance) 然后很命令式,写着也不好看,想着能够有一个函数可以指定加载比 ...
- vue构造器注册UI组件
import ConfirmComponent from '../../components/confirm/index' import { mergeOptions } from '../plugi ...
- Vue 全局注册逐渐 和 局部注册组件
//定义一个名为 button-counter 的新组件 Script: Vue.component('button-counter',{//button-counter 这个是组件的名字 data: ...
- Vue 局部组件和全局组件的使用
<template> <div id="app"> <!--<img alt="Vue logo" src="./ ...
- 38.VUE学习之-全局组件和局部组件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
随机推荐
- Redis缓存中的常见问题
缓存穿透:是指查询一个Redis和数据库中都不存在的数据. 问题:查询一个Redis和数据库中都不存在的数据,大量请求去访问数据库,导致数据库宕机. 解决办法: 1.根据id查询,如果id是自增的,将 ...
- Python逻辑面试题
1 # *****************************列表操作***************************** 2 # names = ["Lihua",&q ...
- Git 命令将电脑上的文件上传到 Github
1.在电脑上安装 Windows 版 Git下载地址:https://git-scm.com/downloads2.使用 Git GUI 生成 SSH Key 3.将 SSH Key 添加到 Gith ...
- redis数据结构和对象二
跳跃表(skiplist) 跳跃表是一种有序数据结构.跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找,大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树简单,所有不 ...
- 【转载】快速理解android View的测量onMeasure()与MeasureSpec
笔者之前有一篇文章已经使用onMeasure()解决了listview与scollview的显示冲突问题,博客地址如下: onMeasure简单方法 完美解决ListView与ScollView冲突问 ...
- 蓝桥杯-分考场(dfs)
分考场 PREV-53 这题的解决方法使用dfs,因为数据很小,才100. 每次当前的人人是否可以和前面的组队,设置两个数组group和fri /*DFS求解:思路每次判断输入的人是否可以和前面的组队 ...
- 无限可能 | Flutter 2 重点更新一览
我们非常高兴在本周发布了 Flutter 2.自 Flutter 1.0 发布至今已有两年多的时间,在如此短暂的时间内,我们解决了 24,541 个 issue,合并了来自 765 个贡献者的 17, ...
- 为什么要从 Linux 迁移到 BSD 4
为什么要从 Linux 迁移到 BSD 4 许可证问题 Linux GPL 许可证对开发者的要求比较严格,它是一种开源的反模式,因为它强制发布所有修改过的源代码,并且阻止其他开源项目的集成,例如 GP ...
- 再探循环依赖 → Spring 是如何判定原型循环依赖和构造方法循环依赖的?
开心一刻 一天,侄子和我哥聊天,我坐在旁边听着 侄子:爸爸,你爱我妈妈吗? 哥:这话说的,不爱能有你吗? 侄子:确定有我不是因为荷尔蒙吗? 哥:因为什么荷尔蒙,因为爱情! 侄子:那我妈花点钱,你咋老说 ...
- MongoDB4.2 分片扫盲说明
说明: 在扫盲MongoDB相关的一些知识的时候,顺手做下笔记.本文将说明分片相关的内容.在比较早之前已经对这些有过说明,可以看MongoDB 分片的原理.搭建.应用.分片(sharding)是指将数 ...