欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue 使用 v-model 雙向綁定父子組件的值遇見的問題及解決方案

 更新時間:2021年03月01日 09:43:07   作者:rxliuli  
這篇文章主要介紹了vue 使用 v-model 雙向綁定父子組件的值遇見的問題及解決方案,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下

場景

今天在使用 v-model 進行組件雙向數(shù)據(jù)綁定的時候遇到了一個奇怪的問題,網(wǎng)頁本身運行正常,瀏覽器一直出現(xiàn)警告信息。

[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "value"

引發(fā)這個警告的是一個自定義組件 RxSelect

Vue.component("RxSelect", {
 model: {
 prop: "value",
 event: "change",
 },
 props: {
 value: [Number, String],
 map: Map,
 },
 template: `
  <select
   v-model="value"
   @change="$emit('change', value)"
  >
   <option
   v-for="[k,v] in map"
   :value="k"
   :key="k"
   >{{v}}</option>
  </select>
  `,
});

吾輩使用的代碼看起來代碼貌似沒什么問題?

<main id="app">
 當前選擇的性別是: {{map.get(sex)}}
 <div>
 <rx-select :map="map" v-model="sex" />
 </div>
</main>

JavaScript 代碼

new Vue({
 el: "#app",
 data: {
 map: new Map().set(1, "保密").set(2, "男").set(3, "女"),
 sex: "",
 },
});

經(jīng)測試,程序本身運行正常,父子組件的傳值也沒什么問題,雙向數(shù)據(jù)綁定確實生效了,然而瀏覽器就是一直報錯。

嘗試解決

吾輩找到一種方式

  1. 為需要雙向綁定的變量在組件內(nèi)部 data 聲明一個變量 innerValue,并初始化為 value
  2. select 上使用 v-model綁定這個變量 innerValue
  3. 監(jiān)聽 value 的變化,在父組件中 value 變化時修改 innerValue 的值
  4. 監(jiān)聽 innerValue 的變化,在變化時使用 this.$emit('change', val) 告訴父組件需要更新 value 的值
Vue.component("RxSelect", {
 model: {
 prop: "value",
 event: "change",
 },
 props: {
 value: [Number, String],
 map: Map,
 },
 data() {
 return {
  innerValue: this.value,
 };
 },
 watch: {
 value(val) {
  this.innerValue = val;
 },
 innerValue(val) {
  this.$emit("change", val);
 },
 },
 template: `
 <select v-model="innerValue">
 <option
  v-for="[k,v] in map"
  :value="k"
  :key="k"
 >{{v}}</option>
 </select>
 `,
});

使用代碼完全一樣,然而組件 RxSelect 的代碼卻多了許多。。。

解決

一種更優(yōu)雅的方式是使用 computed 計算屬性以及其的 get/set,代碼增加的程度還是可以接受的

Vue.component("RxSelect", {
 model: {
 prop: "value",
 event: "change",
 },
 props: {
 value: [Number, String],
 map: Map,
 },
 computed: {
 innerValue: {
  get() {
  return this.value;
  },
  set(val) {
  this.$emit("change", val);
  },
 },
 },
 template: `
 <select v-model="innerValue">
 <option
  v-for="[k,v] in map"
  :value="k"
  :key="k"
 >{{v}}</option>
 </select>
 `,
});

以上就是vue 使用 v-model 雙向綁定父子組件的值遇見的問題及解決方案的詳細內(nèi)容,更多關(guān)于vue 使用 v-model 雙向綁定父子組件的值的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Element-ui設(shè)置el-table表頭全選框隱藏或禁用

    Element-ui設(shè)置el-table表頭全選框隱藏或禁用

    這篇文章主要給大家介紹了關(guān)于Element-ui設(shè)置el-table表頭全選框隱藏或禁用的相關(guān)資料,文中手把手教你實現(xiàn)el-table實現(xiàn)跨表格禁用選項,需要的朋友可以參考下
    2023-07-07
  • vue-cli-service?build?自定義參數(shù)方式

    vue-cli-service?build?自定義參數(shù)方式

    這篇文章主要介紹了vue-cli-service?build?自定義參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • mpvue+vuex搭建小程序詳細教程(完整步驟)

    mpvue+vuex搭建小程序詳細教程(完整步驟)

    這篇文章主要介紹了mpvue+vuex搭建小程序詳細教程(完整步驟),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • vue iview實現(xiàn)動態(tài)新增和刪除

    vue iview實現(xiàn)動態(tài)新增和刪除

    這篇文章主要為大家詳細介紹了vue iview實現(xiàn)動態(tài)新增和刪除,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • vue3+ts實現(xiàn)一個表單組件的詳細代碼

    vue3+ts實現(xiàn)一個表單組件的詳細代碼

    這篇文章主要介紹了vue3+ts實現(xiàn)一個表單組件的詳細代碼,確保通過axios調(diào)用后端接口來獲取省市區(qū)和街道數(shù)據(jù),并在選擇省市區(qū)時加載相應(yīng)的街道數(shù)據(jù),需要的朋友可以參考下
    2024-07-07
  • vue.js自定義組件directives的實例代碼

    vue.js自定義組件directives的實例代碼

    這篇文章主要介紹了vue.js自定義組件directives的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • Vue實現(xiàn)底部側(cè)邊工具欄的實例代碼

    Vue實現(xiàn)底部側(cè)邊工具欄的實例代碼

    這篇文章主要介紹了Vue實現(xiàn)底部側(cè)邊工具欄的實例代碼,文中通過分享一段代碼介紹vue 側(cè)邊導航欄遞歸顯示功能,需要的朋友可以參考下
    2018-09-09
  • vue使用jsonp抓取qq音樂數(shù)據(jù)的方法

    vue使用jsonp抓取qq音樂數(shù)據(jù)的方法

    這篇文章主要介紹了vue使用jsonp抓取qq音樂數(shù)據(jù)的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • vue實現(xiàn)打印功能的兩種方法

    vue實現(xiàn)打印功能的兩種方法

    這篇文章主要介紹了vue實現(xiàn)打印功能的兩種方法,文中通過兩種方法給大家介紹了指定不打印區(qū)域的解決方法,需要的朋友可以參考下
    2018-09-09
  • Vue3中的極致防抖/節(jié)流詳解(附常見方式防抖/節(jié)流)

    Vue3中的極致防抖/節(jié)流詳解(附常見方式防抖/節(jié)流)

    在JavaScript中函數(shù)的防抖和節(jié)流不是什么新鮮話題,這篇文章主要給大家介紹了關(guān)于Vue3中極致防抖/節(jié)流的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02

最新評論