vue统一配置和大量重复代码的处理建议
我是vue的初学者,用这套框架学习起来非常棒!!!
在学习本框架的vue前端的时候发现,页面代码中有大量重复的代码,例如每个页面都有getDataList,sizeChangeHandle等重复方法,el-table的属性:data,border在每个页面有都是重复的,这样做的话有2个方面的缺点:
1、增加的代码的复杂程度
2、维护成本比较高(如果要在在这些重复的代码中统一增加新功能,所有的地方都需要改)
做为初学者,我想到的方案是设计自己的基础组件,将重复的部分放入基础组件,将变化的部分放出来,例如我尝试做了一个基础的表格分页组件,使页面简化如下:
(face[嘻嘻] PS:因为是初学vue,想法不够成熟,如果有更好的方案处理此类问题,请告知)
<template>
<div class="mod-config">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.key" placeholder="参数名" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">查询</el-button>
<el-button v-if="isAuth('generator:infojbxx:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
<el-button v-if="isAuth('generator:infojbxx:delete')" type="danger" @click="delItem()" :disabled="selCount <= 0 ">批量删除</el-button>
</el-form-item>
</el-form>
<basePaginationTable
ref="chilTable"
:listUrl="listUrl"
:delUrl="delUrl"
:dataForm="dataForm"
@selcount="selcount"
>
<baseTableColumn type="selection" width="50"></baseTableColumn>
<baseTableColumn prop="infoId" label="信息ID"></baseTableColumn>
<baseTableColumn prop="xxbt" label="标题"></baseTableColumn>
<baseTableColumn prop="xxnr" label="信息内容"></baseTableColumn>
<baseTableColumn prop="xxlx" label="信息类型"></baseTableColumn>
<baseTableColumn prop="czr" label="操作人"></baseTableColumn>
<baseTableColumn prop="sxr" label="收信人"></baseTableColumn>
<baseTableColumn prop="fssj" label="发信时间"></baseTableColumn>
<baseTableColumn prop="dqzt" label="当前状态"></baseTableColumn>
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
<template slot-scope="scope">
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.infoId)">修改</el-button>
<el-button type="text" size="small" @click="delItem(scope.row.infoId)">删除</el-button>
</template>
</el-table-column>
</basePaginationTable>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div>
</template>
<script>
import AddOrUpdate from './infojbxx-add-or-update'
export default {
// 数据
data () {
return {
addOrUpdateVisible: false,
dataForm: {
key: ''
},
listUrl:"/generator/infojbxx/list",
delUrl: "/generator/infojbxx/delete",
selCount:0
}
},
// 组件
components: {
AddOrUpdate
},
// 组件方法
methods: {
getDataList(){
return this.$refs.chilTable.getDataList()
},
delItem(id){
this.$refs.chilTable.deleteHandle(id)
},
selcount(count){
this.selCount = count
},
// 新增 / 修改
addOrUpdateHandle (id) {
this.addOrUpdateVisible = true
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id)
})
}
}
}
</script>
-
2018-08-04
感谢您的建议。
建议中提到的存在很多重复代码,我们也尝试通过vue 混入 (mixins)处理过。但效果并不是很理想,因为每个业务还是会存在需要不同方式的处理。
其实项目是有提供“在线代码生成器”,通过它可以快速生成基础业务的。所以我们暂时没有提供公共组件 或者 mixins之内的处理。
-
2018-08-05
@daxiong 您好,企业版前后分离的默认生成代码添加删除组件的时候加载页面出错,可否连packge.json一起更新下?img[//cdn.renren.io/5ea14201808051524542509.png]
-
2018-08-06
@saintloong 亲,你这个报错应该是http请求赋值的时候报的错。 与packge.json没有相关联吧!
-
2018-08-06
@daxiong
谢谢大神,我自己先研究一下