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

这篇具有很好参考价值的文章主要介绍了element-ui的el-dialog,简单的封装。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

element-ui的el-dialog,简单的封装。,ui,vue.js,javascript

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使用的简单封装,所有数据皆可外部指定且不用创建多个变量,更灵活可控。

反正就是好用的非常。

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

文章原文文章来源地址https://www.toymoban.com/news/detail-651250.html

到了这里,关于element-ui的el-dialog,简单的封装。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【element-ui】el-dialog改变宽度

    dialog默认宽度为父元素的50%,这就导致在移动端会非常的窄,如图1,需要限定宽度。 解决方法:添加 custom-class 属性,然后在style中编写样式, 注意 ,如果有 scoped 限定,需要加 ::v-deep

    2024年02月11日
    浏览(42)
  • element-ui:多个el-dialog弹框切换会出现闪烁

    使用多个element-ui组件el-dialog弹框切换 打开A弹框,点击关闭,紧接着打开B弹框 会出现一个明显的闪烁 给第一个弹框关闭加一点延迟 参考 【ElementUI】dialog弹窗出现闪屏问题解决办法

    2024年02月11日
    浏览(40)
  • element-ui中更换el-dialog弹窗中默认的关闭按钮

    在使用 element-ui 框架里的 el-dialog 组件时,要修改弹窗里默认的关闭图标;如下图所示:左边是想要替换后的;右边是组件默认的关闭图标; 通过检查组件的元素;发现组件默认的关闭是一个图标;通过图标的形式展现的。 那就可以通过 CSS 隐藏当前的图标;然后在当前图标

    2024年02月12日
    浏览(38)
  • element-ui框架的el-dialog弹出框被遮罩层挡住

    解决办法 在el-dialog标签里添加 :modal-append-to-body=‘false’ 问题分析  先来看看element-ui官网提供的属性说明文档 文档解释: 翻译成大白话就是,若el-dialog弹出框设置了modal-append-to-body=\\\'true\\\'(默认)属性,它的遮罩层就会被插入到body标签下(即与组件所在的最外层div同一层级),

    2024年02月16日
    浏览(31)
  • element-ui el-dialog如何设置响应式宽高且永远水平垂直居中

            el-dialog是使平常使用element-ui比较常用的一个组件,想要灵活控制它达到想要的开发效果,就必须要熟悉它默认一些属性:默认 width:50% , 高度 为标题和el-dialog__body,el-dialog__footer 内容以及padding撑开 ,定位上 默认水平居中,距离顶端15vh         原理是width采

    2024年02月11日
    浏览(35)
  • vue/Element UI 实现Element UI el-dialog 自由拖动

    前言: 最近有个项目,客户要求弹窗可拖动,但是由于elemen ui本身的弹窗并没有拖动的属性,无法满足客户的需求。 于是我百度找到了几篇文章,终于可以实现客户的需求! 请往下看↓↓ 一、新建一个目录:utils 二、创建drag .js文件 三、创建directive.js 文件 四、main.js文件中

    2024年02月02日
    浏览(37)
  • [element-ui] v-click-outside与el-dialog同时存在,出现的Bug

    背景 : v-click-outside 点击盒子aaa外部,盒子aaa隐藏 问题 :因为 el-dialog 绑在了body上,点击 el-dialog 里的任意内容,盒子aaa也隐藏了。 需求 :点击 el-dialog 里的任意内容,盒子aaa不隐藏 解决:给 el-dialog 加上 @click.native.stop 来阻止 el-dialog 内部的点击事件冒泡。

    2024年02月11日
    浏览(36)
  • 如何使用element-ui相关组件如:el-select,el-table,el-switch,el-pagination,el-dialog

    element-ui 官方链接: 组件 | Element https://element.eleme.cn/#/zh-CN/component/installation userTypeOptions后端响应的对象数组数据 表格中添加模板的作用域实现 异步处理 监听status的状态 权限修改异步处理: 几个监听函数与异步请求 axios实现发送异步请求 监听弹窗

    2024年02月07日
    浏览(41)
  • Vue | Element UI Plus 完美解决el-dialog双滚动条、页面抖动问题

    解决因为滚动条隐藏导致的窗口抖动问题: (添加 :lock-scroll=\\\"false\\\" 属性)(无效的话把冒号去掉试试) 解决双滚动条问题: (无效的话去掉deep) 参考: http://t.csdnimg.cn/xavOG

    2024年04月25日
    浏览(54)
  • element UI组件库el-dialog内程序刷新el-dialog内组件方法

    1、牢牢记住,vue是基于JavaScript ES6的,所以只要刷新页面里面data下的数据,页面会自动刷新的。 所以这个数据是父页面传给el-dialog的,要刷新父页面的数据,el-dialog页面内的组件就可以刷新了。 2、在页面的组件处理后台程序完成后,可以调用 that.$parent.$parent.【父页面的方

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包