對(duì)VUE中的對(duì)象添加屬性
背景:在通過(guò)接口獲取數(shù)據(jù)集對(duì)象后,根據(jù)業(yè)務(wù)場(chǎng)景需要在數(shù)據(jù)集對(duì)象上增加額外的屬性
data中定義的數(shù)據(jù)集對(duì)象mindData格式示例如下
mindData: [ {label:'清醒',value:'清醒'}, {label:'朦朧',value:'朦朧'}, {label:'嗜睡',value:'嗜睡'}, {label:'昏睡',value:'昏睡'}, {label:'譫妄',value:'譫妄'}, {label:'模糊',value:'模糊'}]
1) 通過(guò)post調(diào)用接口獲取minData對(duì)象,遍歷添加屬性value和content(方便后續(xù)通過(guò)v-model設(shè)置綁定radio控件的選擇結(jié)果值value)
this.$http.post('XXXXXXXXXXXXXXXXXXXXXXXX', { parms:'xxx' }).then(res => { letsel= this sel.mindData= res.data for(letitemofsel.mindData) { item.value= '' item.content='' } })
2) 這里我自定義了radio控件,部分代碼如下
<mt-cell:title="label"class="zm-radio mint-field"> <input:placeholder="placeholder" type="text" :readonly="!editable" style="margin-right: 14px;" v-model="currentContent" @click="onHandleClick" class="mint-field-core"/> <spanclass="mintui mintui-back reset" @click="popupVisible=true"></span> <mt-popupclass="zm-radio-popup" position="bottom" v-model="popupVisible" popup-transition="popup-fade" :style="{height:popupHeight}" ref="pop"> <zm-container> <zm-mainref="zmRadioMain"> <div@click="popupVisible=false"> <mt-radiostyle="width: 100%" :title="label" align="right" v-model="currentValue" :options="options"> </mt-radio> </div> </zm-main> </zm-container> </mt-popup> </mt-cell> export default{ watch: { popupVisible() { this.options= this.dictItems this.currentValue= this.value letheight= this.options.length * 48 letmaxHeight= window.innerHeight * 0.5 if(height> maxHeight) { this.popupHeight= maxHeight+ 'px' letscrollHeight= maxHeight* maxHeight/ height this.$refs.zmRadioMain.setScroll(scrollHeight,window.innerWidth) } }, currentValue() { console.log('radio_currentValue:'+ this.currentValue) this.$emit('input',this.currentValue) letcontent= this.content letlabel= '' for(letitemof this.options) { if(_.isEqual(item.value,this.currentValue)) { label= item.label break } } this.currentContent= content }
3) 綁定到自定義的radio控件上
<zm-radiolabel="單選:" :editable="false" :dict-data="mindData" :content.sync="data.content" v-model="data.value"></zm-radio>
賦值的關(guān)鍵代碼如下
watch: { popupVisible() { this.options= this.dictItems this.currentValue= this.value
彈出選項(xiàng)框列表的時(shí)候,會(huì)把當(dāng)前文本上的value值賦值給currentValue對(duì)象,這樣下拉框就會(huì)自動(dòng)定位顯示原先的選項(xiàng)值,期望達(dá)到的效果如下
乍看之下,沒(méi)什么問(wèn)題,運(yùn)行后發(fā)現(xiàn)
點(diǎn)擊下拉框,彈出選項(xiàng)列表,怎么數(shù)據(jù)沒(méi)有通過(guò)v-model綁定上去,并且radio的value和lable值一直是空
搗鼓了很久,測(cè)試發(fā)現(xiàn)通過(guò)定義mindRadio對(duì)象的方式綁定在zm-radio對(duì)象上,顯示效果是能獲得期望結(jié)果,那問(wèn)題很明顯,對(duì)象屬性的創(chuàng)建有問(wèn)題
<zm-radiolabel="單選:" :editable="false" :dict-data="mindData" :content.sync="mindRadio.content" v-model="mindRadio.value"></zm-radio> data() { return{ mindRadio: { code:'', value:'' } }
經(jīng)過(guò)vue官方資料查詢,提供了vue.set方法,通過(guò)以下方法解決了設(shè)置對(duì)象屬性的問(wèn)題
this.$http.post('XXXXXXXXXXXXXXXXXXXXXXXX', { parms:'xxx' }).then(res => { letsel= this sel.mindData= res.data for(letitemofsel.mindData) { sel.$set(item,'value','') sel.$set(item,'content','') } })
總結(jié)原因:其實(shí)問(wèn)題是vue實(shí)例對(duì)象不允許直接添加屬性或刪除屬性,需要通過(guò)set方式更新數(shù)據(jù)對(duì)象。
另一種實(shí)現(xiàn)方式,可以采用先給臨時(shí)對(duì)象tempData添加屬性,再賦值給mindData
以上這篇對(duì)VUE中的對(duì)象添加屬性就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue filter 過(guò)濾器、以及在table中的使用介紹
這篇文章主要介紹了Vue filter 過(guò)濾器、以及在table中的使用介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09Vue+WebSocket頁(yè)面實(shí)時(shí)刷新長(zhǎng)連接的實(shí)現(xiàn)
最近vue項(xiàng)目要做數(shù)據(jù)實(shí)時(shí)刷新,數(shù)據(jù)較大,會(huì)出現(xiàn)卡死情況,所以本文主要介紹了頁(yè)面實(shí)時(shí)刷新長(zhǎng)連接,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06Vue使用axios出現(xiàn)options請(qǐng)求方法
這篇文章主要介紹了Vue使用axios出現(xiàn)options請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05簡(jiǎn)單了解vue中父子組件如何相互傳遞值(基礎(chǔ)向)
這篇文章主要介紹了簡(jiǎn)單了解vue中父子組件如何相互傳遞值(基礎(chǔ)向),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07使用Electron打包vue文件變成exe應(yīng)用程序的全過(guò)程
這篇文章主要給大家介紹了使用Electron打包vue文件變成exe應(yīng)用程序的全過(guò)程,文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-01-01vue3 setup訪問(wèn)子組件的 DOM 元素的示例代碼
使用setup的情況下這個(gè)時(shí)候我們無(wú)法使用this,注意在setup中setup是封閉的,不會(huì)將子組件事件暴露出來(lái),所以要用defineExpose(),這篇文章主要介紹了vue3 setup訪問(wèn)子組件的 DOM 元素,需要的朋友可以參考下2023-08-08