Vue针对大量相似组件同时引入的处理方法【弹窗组件】
发布时间:2019-08-12 21:27 星期一
今天在做项目的时候遇到一个很麻烦的事情,就是一个页面有10多个类似的弹窗,而这样的页面不下于10个,这意味着光调用弹窗,我就得处理100多次,首先,一个页面涉及到按钮组10多个,页面中调用这些组件也是10多个,script里面加载组件还是10多个,然后data里面数据监听他们的状态也需要10多个变量,watch里面关于显隐的监听也是10多次,如果用这种模式来写的话,我差不多需要写500多次关于这些组件的调用,而且这么多次调用,在后期会产生很严重的维护问题,以及BUG很难处理的问题。那么一个页面我可不可以只定义一个数据源,然后其他操作全部围绕这个数据源进行,经过4-5个小时的不断试坑,终于在定义一个数据源的基础上能在这个页面上实现上述五个功能。记录一下这段代码,以后会用得着的。
代码示例如下:
<template>
<div class="channel_main">
<el-button v-for="(item, english) in compJSON" @click="showLayer(english)">
{{ item.name }}
</el-button>
<!-- 弹窗的导入 -->
<component v-for="(item, english) in compJSON" :is="english" :layer="item.layer" />
</div>
</template>
<script>
// 大量弹窗组件同时引入时的使用策略
const compJSON= {
'newLayer': { name: '新建', layer: { show: false } },
'importLayer': { name: '导入', layer: { show: false } },
'exportLayer': { name: '导出', layer: { show: false } },
'publishLayer': { name: '发布', layer: { show: false } },
'checkLayer': { name: '校验', layer: { show: false } },
'delLayer': { name: '删除', layer: { show: false } },
'synmodelLayer': { name: '同步模板附件', layer: { show: false } },
'assignbatLayer': { name: '批量分配', layer: { show: false } },
}
// 需要额外定义的组件请放置于此
let components = {
}
// 需要额外定义的data数据请放置于此
let data = {
compJSON,
show: false,
allChecked: false,
input3: '',
select: ''
}
// 此函数用于处理数理至data中及components中
function getComp() {
for (let i in compJSON) {
components[i] = () => import('./layer/' + i)
}
}
getComp()
// 策略结束
export default {
components: components,
data() {
return data
},
methods: {
// 所有弹窗之前进入的判断组件事件
showLayer(key) {
this.compJSON[key].layer.show = true
}
}
}
</script>