国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue2.0利用 v-model 實現組件props雙向綁定的優美解決方案

2019-11-19 17:10:09
字體:
來源:轉載
供稿:網友

在項目中開始使用vue2來構建項目了,跟 vue1 很大的一處不同在于2 取消了props 的雙向綁定,改成只能從父級傳到子級的單向數據流,初衷當然是好的,為了避免雙向綁定在項目中容易造成的數據混亂。

解決方案一

然后開始參考網上和github上的方案等等,發現很多解決方案是這樣的

  1. 用data對象中創建一個props屬性的副本
  2. watch props屬性 賦予data副本 來同步組件外對props的修改
  3. watch data副本,emit一個函數 通知到組件外

這里以最常見的 modal為例子:modal挺合適雙向綁定的,外部可以控制組件的 顯示或者隱藏,組件內部的關閉可以控制 visible屬性隱藏,同時visible 屬性同步傳輸到外部

///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>///調用modal組件<modal :value="isShow" @visible-change="modalVisibleChange"></modal>export default { name: 'app', data () { return {  isShow:true, } }, methods:{  modalVisibleChange(val){  this.isShow = val;  } }}

這樣就解決了 組件props 雙向綁定的問題。 但是這樣有一個不是太美觀的現象就是 在父級調用 modal組件的時候,還需要寫一個 modalVisibleChange 的methods. 總是顯得這部分代碼是多余的。 特別是寫一個讓別人用的公共組件,這樣調用太麻煩了。能不能不寫method來實現props的雙向綁定呢,答案是可以的。

優美解決方案

那就是利用 v-model, 在組件內部放置一個 隱藏的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>///調用modal組件 <modal v-model="isShow"></modal>export default { name: 'app', data () { return {  isShow:false } }}</script>

這樣調用組件的代碼是不是很簡潔,其他人員要調用的話,會很輕松,只要設置 isShow 就可以控制 modal 組件的顯示或者隱藏,同時 如果是modal 組件內部關閉按鈕關閉的,狀態也會傳到 isShow。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九江县| 平乡县| 青海省| 怀柔区| 正定县| 麻栗坡县| 新宁县| 宽城| 绍兴市| 大冶市| 常州市| 苏尼特右旗| 西乌珠穆沁旗| 孟村| 兴宁市| 栖霞市| 闵行区| 宽城| 霞浦县| 定兴县| 资阳市| 宁化县| 布尔津县| 柏乡县| 鄢陵县| 南京市| 德安县| 平阳县| 石台县| 全椒县| 嫩江县| 辽中县| 米脂县| 平利县| 西盟| 西充县| 宽城| SHOW| 阿鲁科尔沁旗| 福清市| 咸丰县|