在一個組件頁面中需要有一個彈窗,為了代碼簡潔我把彈窗封裝成一個組件方便重復調用
描述大致是一個父組件,里面有一個按鈕還有一個子組件(彈窗),點擊按鈕讓彈窗出來,彈窗自帶的有關閉功能,點擊關閉以后再點擊父組件的按鈕需要可以繼續彈出來
本來我是初始化給子組件彈窗綁定一個false,點擊按鈕改變這個綁定的值為true,然后傳值給子組件,然后子組件綁定這個值來控制展示與否,同時子組件有一個關閉回調函數,函數里面吧這個值再改為false發現實現不了
然后想着直接控制v-show來控制展示與否,但是考慮到后期使用放棄了這個想法,
后來使用了dialog組件自帶的closed方法和before-close的屬性都有問題,咨詢了大佬以后他告訴了我原因所在:
父組件給子組件傳值,子組件不能改變父組件傳過來的變量,而elementUI中Dialog的叉叉會自動賦值false,所以報錯
后來給出了我解決方案,
不傳true和false,傳數值,既然他是死循環我們就換個思路不讓他重復
放上部分代碼供參考:
<!--父組件--> <el-button type="primary" style="width:220px;margin-top:40px;margin-left:380px;" @click="chuan">提交</el-button> <dia-log :dialogVisiblea='a'></dia-log> data() { return{ checkedread:true, a : 1, } }, chuan(){ //不斷改變a的值配合子組件watch函數 this.a = this.a+1; }
<!--子組件-->
<template>
<div>
<el-dialog :visible.sync="childrenSay" class="opusuploadDialog">
<div class="opusuploadDialogImg">
<img src="@/assets/img/upload/uploadwaiting.png" style="width:150px;height:120px;" />
</div>
<div class="opusuploadDialogSpan">
<span>正在上傳登記中,請耐心等待</span>
</div>
<el-button type="primary" class="opusuploadDialogBtn">確定</el-button>
</el-dialog>
</div>
</template>
<script>
export default {
props:["dialogVisiblea"],
data(){
return{
childrenSay: false,
// dialogVisible:false,
}
},
watch: {
dialogVisiblea(){
//dialogVisiblea改變賦值
this.childrenSay = true;
}
},
};
</script>


