天天看點

sync分析之為啥el-dialog中的visible需要使用.sync

在使用element-ui 中的dialog元件時,發現visible屬性在使用時需要添加.sync才生效。

我們先自己建立一個dialog元件,如下

sync分析之為啥el-dialog中的visible需要使用.sync

當我們點選關閉按鈕時,會發生警告

sync分析之為啥el-dialog中的visible需要使用.sync

原因就是在VUE中,prop的傳遞是單向下行綁定的,也就是說隻能父傳給子,不能反過來。

雖然在demo中子元件直接修改visible也能夠關閉視窗,但是該變量不能傳給父元件,是以并不建議這麼做,(如果您任性,覺得父元件拿到這個變量也沒用,那您盡管在子元件中修改,但是小心父元件的入參變化時會覆寫你的修改)

現在思考,如果我們将子元件的變化告訴父元件,讓父元件幫我們實作是否可行。也就是說我們操作子元件後通知父元件去關閉視窗,答案是可以的

在VUE中,子元件向父元件通信是通過事件完成的,this.$emit

我們點選子元件關閉按鈕時,調用一下父元件的更新事件,讓父元件在這個更新事件中改變visible這個變量,就可以實作子元件關閉了

.sync這個指令實際上是一個文法糖,在visible屬性變化時會調用父元件的update:visible事件,我們将上面的demo修改如下

sync分析之為啥el-dialog中的visible需要使用.sync

在使用該元件時,使用sync與法糖

sync分析之為啥el-dialog中的visible需要使用.sync

 該文法糖會擴充為

sync分析之為啥el-dialog中的visible需要使用.sync

這樣一來,visible就實作了父子同步,父元件初始化visible,子元件調用關閉事件,觸發父元件update事件,父元件在update事件中更新visible變量,改變子元件可見的狀态

我們在實作雙向綁定時經常使用v-modal,這裡看來,使用.sync也是可以的,不同在于v-modal觸發的是父元件的input事件,.sync觸發的是父元件的update事件

繼續閱讀