基于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来接收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值