Vue中sync修飾符分析原理及用法示例
前幾天在看別人代碼時,發(fā)現(xiàn)了sync修飾符的妙用,特記錄其用法和原理如下。
不使用sync修飾符的代碼示例
父組件:
<template> <div> <div v-if="show">11111</div> <h3>下面是子組件</h3> <SyncDemo :show="show" @update="update"></SyncDemo> </div> </template> <script> import SyncDemo from "./SyncDemo.vue"; export default { name: "Test", components: { SyncDemo }, props: [], data() { return { show: true, }; }, methods: { update(flag) { this.show = flag; }, }, }; </script>
子組件:
<template> <div> <button @click="changeFlag">點擊</button> </div> </template> <script> export default { name: "SyncDemo", components: {}, props: ["show"], methods: { changeFlag() { this.$emit("update", !this.show); }, }, }; </script>
點擊子組件的按鈕就可以控制父組件“11111”的顯示與隱藏。
使用sync修飾符,代碼就會簡單很多。
使用sync修飾符的代碼示例
父組件:
<template> <div> <div v-if="show">11111</div> <h3>下面是子組件</h3> <SyncDemo :show.sync="show"></SyncDemo> </div> </template> <script> import SyncDemo from "./SyncDemo.vue"; export default { name: "Test", components: { SyncDemo }, props: [], data() { return { show: true, }; }, }; </script>
子組件:
<template> <div> <button @click="changeFlag">點擊</button> </div> </template> <script> export default { name: "SyncDemo", components: {}, props: ["show"], methods: { changeFlag() { this.$emit("update:show", !this.show); }, }, }; </script>
可以看到使用sync修飾符之后,父組件就不需要向子組件傳遞方法,父組件也不需要特意寫修改變量的方法了。此時點擊子組件的按鈕,一樣可以控制父組件的“11111”的顯示與隱藏。
sync修飾符的原理
在不使用sync時父組件中子組件綁定的update事件沒有傳遞參數(shù),其實綁定事件默認(rèn)傳遞了$event參數(shù)。
這里值得注意的是如果綁定的是clikc等原生事件時,$event是指事件對象,如果是自定義事件,$event則指子組件觸發(fā)該方法時傳遞的參數(shù),在上面的例子中,$event則指show變量。
所以不使用sync修飾符時,父組件的代碼可以改造成如下(直接將$event賦值給show變量,父組件不需要再另外寫一個修改變量的方法):
<template> <div> <div v-if="show">11111</div> <h3>下面是子組件</h3> <SyncDemo :show="show" @update="show = $event"></SyncDemo> </div> </template> <script> import SyncDemo from "./SyncDemo.vue"; export default { name: "Test", components: { SyncDemo }, props: [], data() { return { show: true, }; }, }; </script>
我們再進(jìn)一步修改代碼(綁定方法時指明要修改的變量):
<SyncDemo :show="show" @update:show="show = $event"></SyncDemo>
這行代碼的語法糖的方式就是使用sync修飾符(代碼變得更簡單)
<SyncDemo :show.sync="show"></SyncDemo>
以上就是通過一步步代碼演變,最后變成使用sync修飾符的方式修改父組件的變量,使我們明白了sync修飾符的原理。
現(xiàn)粘貼vue官網(wǎng)上關(guān)于sync修飾符的解釋:
到此這篇關(guān)于Vue中sync修飾符分析原理及用法示例的文章就介紹到這了,更多相關(guān)Vue sync修飾符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue報錯Component?name"Home"should?always?be?mult
這篇文章主要介紹了Vue報錯Component?name"Home"should?always?be?multi問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09ElementUI中el-input無法輸入、修改及刪除問題解決辦法
這篇文章主要給大家介紹了關(guān)于ElementUI中el-input無法輸入、修改及刪除問題的解決辦法,這種問題產(chǎn)生是因為input在vue中的受控,我們需要去重新改變一下監(jiān)聽和實現(xiàn),需要的朋友可以參考下2023-11-11Vue.js+HighCharts實現(xiàn)動態(tài)請求展示時序數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Vue.js+HighCharts實現(xiàn)動態(tài)請求展示時序數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03vue mint-ui學(xué)習(xí)筆記之picker的使用
本篇文章主要介紹了vue mint-ui學(xué)習(xí)筆記之picker的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10element ui的el-input-number修改數(shù)值失效的問題及解決
這篇文章主要介紹了element ui的el-input-number修改數(shù)值失效的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05