av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

vue 使用 v-model 雙向綁定父子組件的值遇見(jiàn)的問(wèn)題及解決方案

瀏覽:2日期:2022-10-04 14:37:42
場(chǎng)景

今天在使用 v-model 進(jìn)行組件雙向數(shù)據(jù)綁定的時(shí)候遇到了一個(gè)奇怪的問(wèn)題,網(wǎng)頁(yè)本身運(yùn)行正常,瀏覽器一直出現(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ā)這個(gè)警告的是一個(gè)自定義組件 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> `,});

吾輩使用的代碼看起來(lái)代碼貌似沒(méi)什么問(wèn)題?

<main id='app'> 當(dāng)前選擇的性別是: {{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)測(cè)試,程序本身運(yùn)行正常,父子組件的傳值也沒(méi)什么問(wèn)題,雙向數(shù)據(jù)綁定確實(shí)生效了,然而瀏覽器就是一直報(bào)錯(cuò)。

嘗試解決

吾輩找到一種方式

為需要雙向綁定的變量在組件內(nèi)部 data 聲明一個(gè)變量 innerValue,并初始化為 value 在 select 上使用 v-model綁定這個(gè)變量 innerValue 監(jiān)聽(tīng) value 的變化,在父組件中 value 變化時(shí)修改 innerValue 的值 監(jiān)聽(tīng) innerValue 的變化,在變化時(shí)使用 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 計(jì)算屬性以及其的 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 雙向綁定父子組件的值遇見(jiàn)的問(wèn)題及解決方案的詳細(xì)內(nèi)容,更多關(guān)于vue 使用 v-model 雙向綁定父子組件的值的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 国产精品永久久久久久久久久 | 一级片免费在线观看 | 一级黄色片免费观看 | 视频在线一区 | 欧美日韩视频 | www.桃色 | 欧美又大又硬又粗bbbbb | 日韩精品一区二区三区四区 | 日韩手机看片 | 午夜视频在线免费观看 | 国产精品福利一区 | 香蕉视频免费 | 日日干日日射 | 99xav| 免费在线成人 | 久久国产精品一区二区三区 | 成人午夜激情视频 | 夜夜操夜夜操 | 欧洲精品一区 | 欧美日韩a| 躁躁躁日日躁 | 亚洲丝袜一区 | 久久在线免费视频 | aaaaa毛片| 欧美在线中文字幕 | 久久一区精品 | 久久免费毛片 | 在线观看福利影院 | 亚洲啪啪网 | 不卡免费视频 | 一区二区免费 | 国产日韩欧美日韩大片 | 日韩中文视频 | 免费国产网站 | 国产a精品 | 诱人的大乳奶3做爰 | 一级片免费在线观看 | 欧美性猛交xxxx免费看久久久 | 狠狠干夜夜操 | 久久高清免费视频 | 精品人伦一区二区三区 |