当前位置: 首页 > news >正文

element-ui的el-dialog,简单的封装。

在这里插入图片描述

el-dialog是使用率很高的组件

使用el-dialog很多都是按照文档的例子,用一个变量控制是否显示,再来一个变量控制标题。

如果我这个对话框多个地方使用的话还要创建多个变量,甚至关闭之后还要清空一些变量,应该可以简化一点。我写vue的时候奉行的都是数据驱动,像刚才那种写法没有问题,也更灵活,反正都是数据驱动的,即使错误了也只是某些地方没正确处理数据而已。

所以封装也需要保持这些优点,灵活可控。

以下是封装代码

一个.vue文件,表示封装的相应el-dialog代码

<template><el-dialog:title="configData.title+configData.afterTitle"v-model="configData.open"width="700px":close-on-click-modal="false"append-to-body><div class="edit-data-dialog"><h1>哈哈哈,代码封装</h1></div><template #footer><div class="dialog-footer"><el-button @click="configData.open = false">取 消</el-button></div></template></el-dialog>
</template><script>
/*** 数据修改对话框*/
import { defineComponent, ref, getCurrentInstance, reactive, nextTick } from 'vue';
import { mergeObjProperty } from '@/common/OtherTools';export default defineComponent({name: 'EditDataDialog',emits: ['onSuccess'],components: {},setup(_, { emit }) {const configMap = {//配置信息,初始化时使用open: {oldValue: false,},title: {oldValue: 'XX数据',},afterTitle: {oldValue: '',},isShow: {//是否只是展示oldValue: false,},};const configData = reactive(initDataByConfig(configData,{},configMap));const dataContainer = reactive({loading:false,form:{},list:[],});/** 初始化数据(外部调用) */function initData(show = true, data_ = {}, option = {}) {initDataByConfig(configData,option,configMap);dataContainer.list = [];dataContainer.form = {};dataContainer.loading = false;configData.open = show;nextTick(() => {dataContainer.form = data_;getDataInfo();});}/** 获取数据列表 */function getDataInfo() {}return {configData,initData,dataContainer,};},
});
</script><style lang="scss" scoped>
.edit-data-dialog {}
</style>

一个很简单的例子,不用创建多个变量来控制显示以及标题和各种杂七杂八的状态,全部由外部指定,再由initDataByConfig方法初始化。

以下是initDataByConfig方法的代码

/** * 根据配置信息初始化对象* 如果 option 有该属性则使用该属性,没有则初始化* configMap example*  const configMap = {//配置信息,初始化时使用open: {oldValue: false,},title: {oldValue: '入库',},afterTitle: {oldValue: '',},isShow: {//是否只是展示oldValue: false,},};*/
export function initDataByConfig(data = {}, configOption = {}, configMap = {}) {configOption = configOption || {};Object.keys(configMap).forEach(key => {//初始化一些配置信息if (Object.prototype.hasOwnProperty.call(configOption, key)) {data[key] = configOption[key];} else {if (typeof configMap[key].oldValue == 'function') {data[key] = configMap[key].oldValue();} else {data[key] = configMap[key].oldValue;}}});return data;
}

使用的话直接引用然后用ref获取组件实例调用initData方法就行了。

这是我目前对el-dialog使用的简单封装,所有数据皆可外部指定且不用创建多个变量,更灵活可控。

反正就是好用的非常。

有些封装不仅仅是模块分离,还有代码分离,反正就是一句话,代码是先写给人看的,然后才是机器。我奉行的封装是必要才封装,不然是不会去封装的。

文章原文

http://www.lryc.cn/news/125496.html

相关文章:

  • SpringBoot引入外部jar打包失败解决,SpringBoot手动引入jar打包war后报错问题
  • HTTP基础:学习HTTP协议的基本知识,了解请求和响应的过程
  • Spark基础-任务提交相关参数
  • ROS-PyQt小案例
  • 【算法】双指针——leetcode盛最多水的容器、剑指Offer57和为s的两个数字
  • idea 使用debug 启动项目的时候 出现 Method breakpoints may dramatically slow down debugging
  • Tomcat的一些配置问题(server.xml/catalina.sh)
  • 飞天使-jenkins进行远程linux机器修改某个文件的思路
  • Revit SDK 介绍:PanelSchedule 配电盘明细表
  • Java后端实现不用pagehelper。手写分页如何实现?
  • spring 缓存
  • vue3.0 element-plus 不同版本 el-popover 循环优化
  • 计算机网络实验4:HTTP、DNS协议分析
  • 敏捷项目管理如何做好Sprint Backlog?迭代管理
  • 实验三 图像分割与描述
  • npm使用国内淘宝镜像的方法(两种)
  • 05应用程序设计和文件操作
  • 【果树农药喷洒机器人】Part8:果树对靶变量喷药实验
  • framework.beans.factory.annotation.Autowired(required=true)}
  • 【应用笔记】使用 CW32 实现电池备份(VBAT)功能
  • 探讨uniapp的navigator 页面跳转问题
  • 使用Epoll实现高效的多路I/O转接
  • 流程挖掘in汽车丨宝马的流程效能提升实例
  • 微信小程序实现当前页面更新上一个页面
  • 基于PSO-KELM的时间序列数据预测(含对比实验)
  • 线性代数(二) 矩阵及其运算
  • 【图像分类】理论篇(4)图像增强opencv实现
  • Centos下的tcpdump抓包用法
  • 自然语言处理从入门到应用——LangChain:记忆(Memory)-[记忆的存储与应用]
  • 微服务与Nacos概述-5