最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

場景

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

[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: "",
 },
});

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

嘗試解決

吾輩找到一種方式

  1. 為需要雙向綁定的變量在組件內部 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 雙向綁定父子組件的值遇見的問題及解決方案的詳細內容,更多關于vue 使用 v-model 雙向綁定父子組件的值的資料請關注腳本之家其它相關文章!

相關文章

  • 降低vue-router版本的2種解決方法實例

    降低vue-router版本的2種解決方法實例

    vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,適合用于構建單頁面應用,下面這篇文章主要給大家介紹了關于降低vue-router版本的2種解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • vue 單元測試的推薦插件和使用示例

    vue 單元測試的推薦插件和使用示例

    單元測試是軟件開發(fā)非?;A的一部分。單元測試會封閉執(zhí)行最小化單元的代碼,使得添加新功能和追蹤問題更容易。Vue 的單文件組件使得為組件撰寫隔離的單元測試這件事更加直接。它會讓你更有信心地開發(fā)新特性而不破壞現有的實現,并幫助其他開發(fā)者理解你的組件的作用。
    2021-06-06
  • vue中改變選中當前項的顯示隱藏或者狀態(tài)的實現方法

    vue中改變選中當前項的顯示隱藏或者狀態(tài)的實現方法

    下面小編就為大家分享一篇vue中改變選中當前項的顯示隱藏或者狀態(tài)的實現方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Vue表單驗證插件Vue Validator使用方法詳解

    Vue表單驗證插件Vue Validator使用方法詳解

    這篇文章主要為大家詳細介紹了Vue表單驗證插件Vue Validator使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Vue3+Ant?design?實現Select下拉框一鍵全選/清空功能

    Vue3+Ant?design?實現Select下拉框一鍵全選/清空功能

    在做后臺管理系統項目的時候,產品增加了一個在Select選擇器中添加一鍵全選和清空的功能,他又不讓在外部增加按鈕,其實如果說在外部增加按鈕實現全選或者清空的話,功能比較簡單的,下面給大家分享Vue3+Ant?design?實現Select下拉框一鍵全選/清空功能,需要的朋友可以參考下
    2024-05-05
  • Vue項目打包并發(fā)布的完整步驟記錄

    Vue項目打包并發(fā)布的完整步驟記錄

    在一般情況下,vue項目代碼部署發(fā)布只需將代碼打包后直接上傳到服務器即可,下面這篇文章主要給大家介紹了關于Vue項目打包并發(fā)布的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • 移動端調試神器vConsole使用詳解

    移動端調試神器vConsole使用詳解

    vConsole?是框架無關的,可以在?Vue、React?或其他任何框架中使用,今天通過本文給大家介紹移動端調試神器vConsole使用,感興趣的朋友一起看看吧
    2022-04-04
  • Vue中ElementUI結合transform使用時如何修復el-select彈框定位不準確問題

    Vue中ElementUI結合transform使用時如何修復el-select彈框定位不準確問題

    這篇文章主要介紹了Vue中ElementUI結合transform使用時如何修復el-select彈框定位不準確問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • vue中對接Graphql接口的實現示例

    vue中對接Graphql接口的實現示例

    本文主要介紹了vue中對接Graphql接口的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • uni-app進階使用技巧分享

    uni-app進階使用技巧分享

    uni-app是一款基于Vue.js的跨平臺開發(fā)框架,它借助了 Vue.js 的語法和組件化開發(fā)思想,本文將詳細介紹 uni-app 的全局配置、靜態(tài)資源管理、路由管理以及數據通信和狀態(tài)管理的進階使用技巧,需要的朋友可以參考下
    2023-06-06

最新評論

中阳县| 城步| 固始县| 民乐县| 青阳县| 宾川县| 根河市| 且末县| 丁青县| 宁晋县| 淮北市| 滨州市| 辽宁省| 彝良县| 个旧市| 横山县| 苍溪县| 珠海市| 湄潭县| 邯郸县| 嘉义县| 贡觉县| 蓬溪县| 通许县| 永修县| 通道| 正安县| 寻乌县| 昌江| 绥江县| 渝北区| 河津市| 河源市| 辽宁省| 巴彦县| 互助| 永靖县| 贡嘎县| 宁德市| 新津县| 西和县|