基于ElementUI将Dialog对话框写入组件引入

21 篇文章 0 订阅
9 篇文章 0 订阅

将Dialog对话框写入组件引入

如果对话框里包含的内容很多的话,和主页面写在一起,代码量会非常大,所以我想采用将Dialog中的内容单独写在一个文件里,然后在主页面引入。
因为并不是公共组件,所以我写在了自己部分的文件夹里。

组件内容:

<template>
    <el-dialog
        title="提示"
        :visible.sync="connPositionDialog"
        width="50%"
    >
        <span>对话框对话框对话框</span>
        
    </el-dialog>
</template>

<script>
export default {
    data() {
        return {
            connPositionDialog: false
        };
    },
    methods: {
        showPosition() {
            this.connPositionDialog = true;
        }
    }
};
</script>

<style>

</style>

在主页面引入:

<template>
    <div>
        <el-button
                type="primary"
                class="addBtn"
                @click="connPosition()"
            >+ 新增</el-button>
    	<connecte-position v-if="positionDialog" ref="connectePosition" />
    </div>
</template>

import connectePosition from './connectePosition.vue';

export default {
    components: {
        connectePosition
    },
    data() {
        return {
            positionDialog: false
        };
    },
    methods: {
        connPosition() {
            this.positionDialog = true;
            // 这里是需要从refs里选择connectePosition里的showPosition()方法,将组件里的connPositionDialog属性改为true,否则弹框不显示
            this.$refs.connectePosition.showPosition();
        }
    }
};

--------------------------------分割线----------------------------
采用以上这种方法,我发现控制台会报错:第一次点击按钮对话框打不开,并且控制台会报错,之后点击才能打开
第一次点击报的错:
在这里插入图片描述
应该是第一次点击时,对话框还未完成初始化,所以会提示找不到。
所以采用props中定义属性的方法。

    props: {
        visible: {
            type: Boolean,
            default: false
        },
        postnum: {
            type: Number,
            default: 0
        }
    },

上面的标签里面:

    <el-dialog
        title="关联职位"
        :visible.sync="visible"
        :before-close="handleClose"
        width="50%"
    >

引入组件的地方:

                    <connecte-position
                        :visible.sync="isShowDialog"
                        :postnum="connecteNum"
                    />

isShowDialog是父组件传给子组件的属性值,由子组件中的visible接收。
由于当关闭对话框时,父组件传给子组件的属性值会变化:visible由true变为false,但是数据流是单向从父组件传递到子组件的,会导致父组件接收不到该属性值的变化,所以会出现第二次就打不开的问题。
在这里插入图片描述

所以需要在子组件中用传递的值初始化一个单独的属性,然后用v-model绑定,但是由于对话框使用的不是v-model,而是:visible.sync,所以props里要用visible来接收。

### 回答1: 如果你在使用 ElementUI 中出现了多个对话框出现相同的内容,可能是因为你在多个对话框中使用了同一个变量来保存内容。 解决这个问题的方法是,为每个对话框创建一个独立的变量来保存内容。你可以在创建对话框时,为对话框传递一个唯一的标识符,然后在保存内容时,使用该标识符来区分不同的对话框。 例如,你可以这样创建一个对话框: ``` <el-dialog :visible.sync="dialogVisible" :title="title" :close-on-click-modal="false"> <span>{{ content }}</span> </el-dialog> ``` 在数据中保存对话框的内容和标识符: ``` data() { return { dialogVisible: false, dialogs: [ { id: 'dialog1', title: 'Dialog 1', content: 'Content for Dialog 1' }, { id: 'dialog2', title: 'Dialog 2', content: 'Content for Dialog 2' }, { id: 'dialog3', title: 'Dialog 3', content: 'Content for Dialog 3' }, ] } }, ``` 然后在打开对话框时,根据标识符来设置对话框的内容: ``` openDialog(id) { const dialog = this.dialogs.find(dialog => dialog.id === id) this.title = dialog.title this.content = dialog.content this.dialogVisible = true } ``` 这样,每个对话框就可以保存独立的内容,避免出现相同的内容。 ### 回答2: 当elementUI中的多个对话框出现相同的内容时,可以通过以下几种方式来解决: 1. 分别创建不同的对话框组件:在使用elementUI对话框组件时,可以为每个对话框创建一个独立的组件。这样每个对话框都有独立的组件实例,可以独立传入不同的内容,避免内容重复问题。 2. 动态生成对话框内容:可以使用JavaScript代码动态生成对话框的内容。在打开一个对话框之前,根据需要生成不同的内容,并通过对话框组件的参数来传入。这样每次打开对话框时,都可以传入不同的内容,从而解决内容重复的问题。 3. 利用elementUI的动态组件功能:elementUI提供了动态组件的功能,可以根据需要在对话框内部动态切换不同的组件。可以根据需要创建多个不同的组件,然后根据情况动态切换展示内容,避免内容重复问题。 综上所述,解决elementUI多个对话框出现相同内容的问题可以通过创建独立的对话框组件、动态生成对话框内容或利用动态组件功能来实现。根据具体情况选择合适的解决方案,可以有效避免对话框内容重复的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值