电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:2日期:2022-10-04 14:37:42
場景

今天在使用 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'

引發這個警告的是一個自定義組件 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: '', },});

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

嘗試解決

吾輩找到一種方式

為需要雙向綁定的變量在組件內部 data 聲明一個變量 innerValue,并初始化為 value 在 select 上使用 v-model綁定這個變量 innerValue 監聽 value 的變化,在父組件中 value 變化時修改 innerValue 的值 監聽 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 的代碼卻多了許多。。。

解決

一種更優雅的方式是使用 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
相關文章:
主站蜘蛛池模板: 专业生产动态配料系统_饲料配料系统_化肥配料系统等配料系统-郑州鑫晟重工机械有限公司 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | 周口市风机厂,周鼓风机,河南省周口市风机厂 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 太阳能发电系统-太阳能逆变器,控制器-河北沐天太阳能科技首页 | 工控机,嵌入式主板,工业主板,arm主板,图像采集卡,poe网卡,朗锐智科 | 合肥网络推广_合肥SEO网站优化-安徽沃龙First | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 「阿尔法设计官网」工业设计_产品设计_产品外观设计 深圳工业设计公司 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 数字展示在线_数字展示行业门户网站 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | 真空上料机(一种真空输送机)-百科 | 捆扎机_气动捆扎机_钢带捆扎机-沈阳海鹞气动钢带捆扎机公司 | 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 北京乾茂兴业科技发展有限公司| 上海质量认证办理中心| 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 运动木地板价格,篮球馆体育运动木地板生产厂家_欧氏地板 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 耐酸泵,耐酸泵厂家-淄博华舜耐腐蚀真空泵 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 浙江建筑资质代办_二级房建_市政_电力_安许_劳务资质办理公司 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | PAS糖原染色-CBA流式多因子-明胶酶谱MMP-上海研谨生物科技有限公司 | 聚氨酯复合板保温板厂家_廊坊华宇创新科技有限公司 | 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 食品级焦亚硫酸钠_工业级焦亚硫酸钠_焦亚硫酸钠-潍坊邦华化工有限公司 | 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 | 天津蒸汽/热水锅炉-电锅炉安装维修直销厂家-天津鑫淼暖通设备有限公司 | 多功能三相相位伏安表-变压器短路阻抗测试仪-上海妙定电气 | 便携式XPDM露点仪-在线式防爆露点仪-增强型烟气分析仪-约克仪器 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 |