Vue中input被賦值后,無(wú)法再修改編輯的問(wèn)題及解決
input被賦值后,無(wú)法再修改編輯
我們直入主題
上面是我司的業(yè)務(wù)邏輯圖,使用elementui框架,如圖,請(qǐng)求數(shù)據(jù)賦值后,不僅有檢測(cè)報(bào)錯(cuò)信息,而且還有無(wú)法修改編輯的問(wèn)題。
起初以為是我的設(shè)置的對(duì)象問(wèn)題,困擾我許久。
后來(lái),翻閱了大佬的文章才了解。
<el-form ref="formInline" :inline="true" :rules="rules" :model="formInline" label-position="right" size="medium"> <el-form-item label="SIM卡號(hào)" prop="icsim"> <el-input v-model.number="formInline.icsim" maxlength="18" /> </el-form-item> <el-form-item label="ICCID碼" prop="iccid"> <el-input v-model="formInline.iccid" /> </el-form-item> <el-form-item label="激活時(shí)間" prop="start"> <el-date-picker v-model="formInline.start" value-format="yyyy-MM-dd HH:mm:ss" style="width:200px" placeholder="選擇日期"/> </el-form-item> <el-form-item label="服務(wù)到期時(shí)間" prop="end"> <el-date-picker v-model="formInline.end" value-format="yyyy-MM-dd HH:mm:ss" style="width:200px" placeholder="選擇日期"/> </el-form-item> </el-form>
export default { name: 'formInline', data () { return { formInline: {} } }, methods: { // vue 請(qǐng)求數(shù)據(jù) async getSimData(params) { const res = await simInfoByVid(params) const { sid, iccid, start, end, storage, icsim, vid } = res.data this.formInline.sid = sid this.formInline.iccid = iccid this.formInline.start = start this.formInline.end = end this.formInline.storage = storage this.formInline.icsim = icsim this.formInline.vid = vid } } }
上面的代碼是我第一次寫(xiě)的代碼,使用上面的方法,導(dǎo)致input框或者日期選擇框無(wú)法再編輯。
根據(jù)官方文檔定義:如果在實(shí)例創(chuàng)建之后添加新的屬性到實(shí)例上,它不會(huì)觸發(fā)視圖更新
根據(jù)大佬的文章,總結(jié)了兩個(gè)辦法:
方法一
由此Vue實(shí)例創(chuàng)建時(shí),formInline的屬性名并未聲明,因此Vue就無(wú)法對(duì)屬性執(zhí)行 getter/setter 轉(zhuǎn)化過(guò)程,導(dǎo)致formInline屬性不是響應(yīng)式的,因此無(wú)法觸發(fā)視圖更新。
解決的方式有兩種,第一種就是顯示的聲明formInline這個(gè)對(duì)象的屬性,如:
data () { return { formInline: { sid: '', iccid: '', start: '', end: '', storage: '', icsim: '', vid: '' } }
方法二
使用Vue的全局API: $set()賦值:
async getSimData(params) { const res = await simInfoByVid(params) const { sid, iccid, start, end, storage, icsim, vid } = res.data this.$set(this.formInline, 'sid', sid) this.$set(this.formInline, 'iccid', iccid) this.$set(this.formInline, 'start', start) this.$set(this.formInline, 'end', end) this.$set(this.formInline, 'storage', storage) this.$set(this.formInline, 'icsim', icsim) }
vue綜合問(wèn)題歸納input框賦值后不能進(jìn)行編輯
項(xiàng)目場(chǎng)景
項(xiàng)目場(chǎng)景:前端實(shí)現(xiàn)查看編輯功能的時(shí)候會(huì)出現(xiàn), input框賦值后input框不能進(jìn)行編輯,編輯之后自動(dòng)取消,驗(yàn)證無(wú)法進(jìn)行取消
問(wèn)題描述
數(shù)據(jù)代碼:
<el-textarea v-model="drawerForm.msg" placeholder="請(qǐng)輸入功能描述" :rows="3" allowClear ></el-textarea>
js:
export default { ? name: 'drawerForm', ? data () { ? ? return { ? ? ? drawerForm: {} ? ? } ? }, ? methods: { ? ? handleEditHelloForm () { ? ? ? ? // 模擬編輯功能需要數(shù)據(jù)回顯 ? ? ? ? this.helloForm.msg = 'hello 我是drawerForm中的msg值' ? ? } ? } }
原因分析
- 空input框進(jìn)行賦值后,不存在setter和getter方法,導(dǎo)致無(wú)法實(shí)現(xiàn)雙向綁定
- 由此Vue實(shí)例創(chuàng)建時(shí),drawerForm.屬性名并未聲明,因此Vue就無(wú)法對(duì)屬性執(zhí)行 getter/setter 轉(zhuǎn)化過(guò)程,導(dǎo)致drawerForm屬性不是響應(yīng)式的,因此無(wú)法觸發(fā)視圖更新。
解決方案
第一種就是顯示的聲明drawerForm這個(gè)對(duì)象的屬性,如:
data () { return { drawerForm: { msg:"" } } },
使用vue的全局方法: this.$set(data, property, value)
data為要修改的對(duì)象,property為要添加的屬性,value就是這個(gè)屬性的值? ? handleEditHelloForm () { ? ? ? ? // 模擬編輯功能需要數(shù)據(jù)回顯 ? ? ? ? Vue.set(this.helloForm,'msg', 'hello 我是drawerForm中的msg') ? ? }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解無(wú)限滾動(dòng)插件vue-infinite-scroll源碼解析
這篇文章主要介紹了詳解無(wú)限滾動(dòng)插件vue-infinite-scroll源碼解析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05vue 動(dòng)態(tài)設(shè)置瀏覽器標(biāo)題的方法詳解
這篇文章主要為大家介紹了vue動(dòng)態(tài)設(shè)置瀏覽器標(biāo)題的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-12-12vue使用vue-json-viewer展示JSON數(shù)據(jù)的詳細(xì)步驟
最近在開(kāi)發(fā)一個(gè)公司的投放管理系統(tǒng)的操作日志模塊,要查看某條操作日志的請(qǐng)求參數(shù),要將請(qǐng)求的參數(shù)以JSON格式的形式展示出來(lái),下面這篇文章主要給大家介紹了vue使用vue-json-viewer展示JSON數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-09-09vue項(xiàng)目環(huán)境變量配置的實(shí)現(xiàn)方法
這篇文章主要介紹了vue項(xiàng)目環(huán)境變量配置的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10elementui+vue+axios實(shí)現(xiàn)文件上傳本地服務(wù)器
這篇文章主要為大家詳細(xì)介紹了elementui+vue+axios實(shí)現(xiàn)文件上傳本地服務(wù)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08vue中v-for循環(huán)給標(biāo)簽屬性賦值的方法
這篇文章主要介紹了vue中v-for循環(huán)給標(biāo)簽屬性賦值的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10