91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue數據的雙向綁定如何實現

發布時間:2022-10-25 16:25:59 來源:億速云 閱讀:155 作者:iii 欄目:開發技術

本篇內容介紹了“Vue數據的雙向綁定如何實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

實現組件雙向數據綁定

我們先來看看拋棄 .sync 修飾符來實現組件雙向數據綁定的工作: 通過Vue提供的機制,繞開直接修改 prop 來實現組件雙向數據綁定 。

其思路大致是這樣:

  • 在數據渲染時使用 prop 渲染數據

  • 將 prop 綁定到子組件自身的數據上,修改數據時修改自身數據來替代 prop

  • watch 子組件自身數據的改變,觸發事件通知父組件更改綁定到 prop 的數據

這樣做的好處是: 父組件數據改變時,不會修改存儲 prop 的子組件數據,只是以子組件數據為媒介,完成對 prop 的雙向修改 。

修改的代碼如下:

<div id="app">
 <div class="parent">
  <h4>父組件Parent數據</h4>
  <ul>
   <li>
    <label>姓名:</label>
    <span>{{ name }}</span>
    <input type="text" v-model="name" />
   </li>
   <li>
    <label>年齡:</label>
    <span>{{ age }}</span>
    <input type="number" v-model="age" />
   </li>
  </ul>
 </div>
 <child :my-name="name" :my-age="age" @update:my-name="val => name = val" @update:my-age="val => age = val"></child>
</div>
<template id="child">
 <div class="child">
  <h4>子組件child數據</h4>
  <ul>
   <li>
    <label>姓名</label>
    <span>{{ myName }}</span>
    <input type="text" v-model="childMyName" />
   </li>
   <li>
    <label>年齡</label>
    <span>{{ myAge }}</span>
    <input type="number" v-model="childMyAge" />
   </li>
  </ul>
 </div>
</template>

在上面的這個示例中,我們并沒有使用 .sync 修飾符,但在調用子組件的時候使用了 @update :

<child :my-name="name" :my-age="age" @update:my-name="val => name = val" @update:my-age="val => age = val"></child>

子組件中渲染到HTML模板的數據是用的 prop 數據,但監聽 input 是使用的子組件自身定義的數據作為 v-model 。這樣一來就不會直接修改 prop 。簡單來說, 一切 prop 的改變從本質上來說都由父組件完成 。JavaScript的代碼如下:

let parent = new Vue({
 el: '#app',
 data () {
  return {
   name: 'w3cplus',
   age: 7
  }
 },
 components: {
  'child': {
   template: '#child',
   props: ['myName', 'myAge'],
   data () {
    return {
     childMyName: this.myName,
     childMyAge: this.myAge
    }
   },
   watch: {
    childMyName: function (val) {
     this.$emit('update:my-name', val)
    },
    childMyAge: function (val) {
     this.$emit('update:my-age', val)
    }
   }
  }
 }
})

因為子組件中 props 的 myName 和 myAge 不可寫,所以在 data 中創建一個副本 childMyName 和 childMyAge 。初始值為 props 屬性 myName 和 myAge 的值,同時在組件內所有需要調用 props 的地方調用 data 中的 childMyName 和 childMyAge 。

components: {
 'child': {
  template: '#child',
  props: ['myName', 'myAge'],
  data () {
   return {
    childMyName: this.myName,
    childMyAge: this.myAge
   }
  },
  ...
 }
}

接下來在子組件中通過 watch 來對 props 屬性的 myName 和 myAge 進行監聽。當 props 修改后對應 data 中的副本 childMyName 和 childMyAge 也要同步數據。

...
watch: {
 childMyName: function (val) {
  this.$emit('update:my-name', val)
 },
 childMyAge: function (val) {
  this.$emit('update:my-age', val)
 }
}
...

接下來要做的事情就是當組件內的 props 屬性發生變化時,需要向組件外(父組件)發送通知,通知組件內屬性變更,然后由外層(父組件)自己來決定是否變更他的數據。

接下來我們按上面的方案來改造上一節示例中的switch按鈕。

至此,實現了組件內部數據與組件外部的數據的雙向綁定,組件內外數據的同步。簡而言之: 組件內部自已變了告訴外部,外部決定要不要變更 。

什么樣的 props 適合做雙向綁定

事實上,在Vue中,雙向綁定的 props 是不利于組件間的數據狀態管理,尤其是較為復雜的業務當中,因此在實際項目中應該盡量少用雙向綁定,過于復雜的數據處理,建議使用 Vuex 。但很多時候又避免不了使用雙向綁定。那么什么場景之下使用 props 來做雙向綁定呢?

如果在你的項目中,同時滿足下面的條件時,我們就可以考慮使用 props 來做雙向綁定:

  • 組件內部需要修改 props

  • 組件需要可以由外部在運行時動態控制,而非單純的初始化

  • 組件父部需要讀取組件內的狀態來進行處理

雖然上面的示例展示了我們怎么在Vue 2.0中實現 props 的雙向綁定,但如果項目中有更多這樣的雙向綁定,那么就會讓你做一些重復的事情,而且代碼也很冗余,事情也會變得復雜。為了改變這樣的現象,可以借助Vue的 mixin 來自動化處理 props 的雙向綁定的需求。不過在這節中,我們不會學習這方面的知識,后面我們在學習 mixin 時,可地再回過頭來實現這樣的功能。

“Vue數據的雙向綁定如何實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

浠水县| 琼结县| 定远县| 双峰县| 南涧| 田东县| 宁德市| 翁牛特旗| 景宁| 闽侯县| 焉耆| 绍兴市| 玛沁县| 明水县| 临邑县| 香格里拉县| 扎兰屯市| 临湘市| 会理县| 堆龙德庆县| 公主岭市| 新余市| 淮南市| 怀远县| 霞浦县| 望奎县| 岳普湖县| 黄陵县| 夏津县| 靖安县| 娱乐| 阆中市| 济阳县| 宽城| 兴业县| 沂源县| 屏东市| 湟源县| 马鞍山市| 筠连县| 延庆县|