您好,登錄后才能下訂單哦!
這篇文章主要介紹了Vue2.0利用 v-model如何實現(xiàn)組件props雙向綁定,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
在項目中開始使用vue2來構(gòu)建項目了,跟 vue1 很大的一處不同在于2 取消了props 的雙向綁定,改成只能從父級傳到子級的單向數(shù)據(jù)流,初衷當然是好的,為了避免雙向綁定在項目中容易造成的數(shù)據(jù)混亂。
解決方案一
然后開始參考網(wǎng)上和github上的方案等等,發(fā)現(xiàn)很多解決方案是這樣的
用data對象中創(chuàng)建一個props屬性的副本
watch props屬性 賦予data副本 來同步組件外對props的修改
watch data副本,emit一個函數(shù) 通知到組件外
這里以最常見的 modal為例子:modal挺合適雙向綁定的,外部可以控制組件的 顯示或者隱藏,組件內(nèi)部的關(guān)閉可以控制 visible屬性隱藏,同時visible 屬性同步傳輸?shù)酵獠?/p>
///modal.vue 組件 <template> <div class="modal" v-show="visible"> <div class="close" @click="cancel">X</div> </div> </template> <script> export default { name:'modal', props: { value: { type: Boolean, default:false } }, data () { return { visible:false } }, watch:{ value(val) { console.log(val); this.visible = val; }, visible(val) { this.$emit("visible-change",val); } }, methods:{ cancel(){ this.visible = false; } }, mounted() { if (this.value) { this.visible = true; } } } </script> ///調(diào)用modal組件 <modal :value="isShow" @visible-change="modalVisibleChange"></modal> export default { name: 'app', data () { return { isShow:true, } }, methods:{ modalVisibleChange(val){ this.isShow = val; } } }
這樣就解決了 組件props 雙向綁定的問題。 但是這樣有一個不是太美觀的現(xiàn)象就是 在父級調(diào)用 modal組件的時候,還需要寫一個 modalVisibleChange 的methods. 總是顯得這部分代碼是多余的。 特別是寫一個讓別人用的公共組件,這樣調(diào)用太麻煩了。能不能不寫method來實現(xiàn)props的雙向綁定呢,答案是可以的。
優(yōu)美解決方案
那就是利用 v-model, 在組件內(nèi)部放置一個 隱藏的input 控件來保存v-model的值,進行雙向綁定
改成如下代碼:
<template> <div class="modal" v-show="visible"> <div class="close" @click="cancel">X</div> <input type="text" :value="value" style='display:none;'> </div> </template> <script> export default { props: { value: { type: Boolean, default:false } }, data () { return { visible:false } }, watch:{ value(val) { console.log(val); this.visible = val; }, visible(val) { this.$emit('input', val); } }, methods:{ cancel(){ this.visible = false; } }, mounted() { if (this.value) { this.visible = true; } } } </script> ///調(diào)用modal組件 <modal v-model="isShow"></modal> export default { name: 'app', data () { return { isShow:false } } } </script>
這樣調(diào)用組件的代碼是不是很簡潔,其他人員要調(diào)用的話,會很輕松,只要設(shè)置 isShow 就可以控制 modal 組件的顯示或者隱藏,同時 如果是modal 組件內(nèi)部關(guān)閉按鈕關(guān)閉的,狀態(tài)也會傳到 isShow。
Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以創(chuàng)建可維護性和可測試性更強的代碼庫,Vue允許可以將一個網(wǎng)頁分割成可復(fù)用的組件,每個組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網(wǎng)頁中相應(yīng)的地方,所以越來越多的前端開發(fā)者使用vue。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Vue2.0利用 v-model如何實現(xiàn)組件props雙向綁定”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。