vue2?element-ui?el-checkbox視圖不更新問題及解決
vue2 element-ui el-checkbox視圖不更新
今天在開發(fā)過程發(fā)現(xiàn)一個問題,如標(biāo)題所描述的,我在更改了data(){return{}}里的數(shù)據(jù)后, 也就是對 el-checkbox 的 v-model 綁定了一個 data() 里面的數(shù)據(jù),與之對應(yīng)的視圖沒有發(fā)生變化
我之所以 斷定 我data() 里的數(shù)據(jù)發(fā)生了變化,而視圖沒有發(fā)生變化,是因為 在chrome 的 插件 vue devtools 中 確認(rèn)了 data() 數(shù)據(jù)是發(fā)生了改變, 也就證明el-checkbox 的v-model綁定的boolean 值發(fā)生了改變,此時視圖應(yīng)該 按照 v-model="false" ==> v-model="true" 從 未勾選狀態(tài)==>勾選狀態(tài) 但是 頁面一直沒有更新。
在確認(rèn)自己不是因為低級錯誤而導(dǎo)致的 視圖不更新后, 對該問題進(jìn)行了 不同的處理
1: 百度: 使用 $set() 、使用froceUpdate() 這兩者都不起作用
既然 已經(jīng)明確了 數(shù)據(jù)是發(fā)生了變化,依賴數(shù)據(jù)的視圖沒有發(fā)生改變, 那么 可以通過 較為偏激的方法 用v-if="true" / v-if="false" 的方法 將組件銷毀再重新掛載, (此種方法過于 偏激,而且相對另類 不推薦使用)
既然有通過 v-if 的方法 強(qiáng)行讓 元素重新渲染,那么 是否可以利用 vue 的一些特性進(jìn)行類似的操作呢?
我個人觀點(diǎn)
vue 響應(yīng)式 可以通過 數(shù)據(jù)驅(qū)動頁面的更新 加上 diff算法, 可以試著給 el-checkbox 組件 一個 無關(guān)緊要的屬性
例如 :
data-xxx=“響應(yīng)式數(shù)據(jù)” 通過更改 該響應(yīng)式數(shù)據(jù) 讓vue 在進(jìn)行diff算法中,發(fā)現(xiàn)虛擬Dom el-checkbox 的其中一個 data-xxx 屬性發(fā)生變化,從而 讓其觸發(fā)該組件的 渲染,以達(dá)到 v-model 綁定的值改變 所對應(yīng)的 視圖發(fā)生變化。
- 例子:
<el-checkbox v-model="list[index].obj[value].checked" :data-a="checked">
- 偽代碼:
function changeValue(){
// 將 list[index].obj[value].checked 為 false 改為 true
this.list[index].obj[value].checked = true // 此時視圖 并沒有因為 數(shù)據(jù)的變化 而 從 未勾選變成勾選狀態(tài)
// 更改一個 無關(guān)緊要的 數(shù)值
this.checked = !this.checked // 此處 無論checked 是什么 都不影響 目的是讓vue 去重新渲染 el-checkbox 這個組件
}總結(jié)
其實(shí)在一般的vue 開發(fā)中,如果 響應(yīng)式數(shù)據(jù) 不是那種 非常復(fù)雜的數(shù)據(jù)類型一般不會出現(xiàn)響應(yīng)式數(shù)據(jù)變化而視圖不更行的情況,
但 上述例子中 list是一個數(shù)組,數(shù)組里面有多個屬性,其中一個屬性為一個對象,而我們需要改變的值就是這個對象的其中一個屬性, 可能 在vue 的雙向綁定中,
由于 list 是一個相對復(fù)雜的數(shù)據(jù)類型,當(dāng)深層次里的屬性發(fā)生了 改變, vue沒法做到 數(shù)據(jù)驅(qū)動 視圖更新,
當(dāng)我們非常確認(rèn)數(shù)據(jù)已經(jīng)更新了, 僅僅是視圖沒有發(fā)生變化,此時 要做的就是 能讓 視圖發(fā)生改變的操作 通過改變一個無關(guān)緊要的 響應(yīng)式數(shù)據(jù) 從而 讓 組件進(jìn)行 重新渲染操作 無疑是一個 不錯的 解決方案
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue如何使用 Slot 分發(fā)內(nèi)容實(shí)例詳解
本篇文章主要介紹了vue如何使用 Slot 分發(fā)內(nèi)容實(shí)例詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
解決VueCil代理本地proxytable無效報錯404的問題
這篇文章主要介紹了解決VueCil代理本地proxytable無效報錯404的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
vue使用JSON編輯器:vue-json-editor詳解
文章介紹了如何在Vue項目中使用JSON編輯器插件`vue-json-editor`,包括安裝、引入、注冊和使用示例,通過這些步驟,用戶可以在Vue應(yīng)用中輕松實(shí)現(xiàn)JSON數(shù)據(jù)的編輯功能,文章最后呼吁大家支持腳本之家2025-01-01
利用nodeJS+vue圖片上傳實(shí)現(xiàn)更新頭像的過程
Vue是一套構(gòu)建用戶界面的框架,最近工作中遇到了一個需求,需要做一個更新頭像的通能,下面這篇文章主要給大家介紹了關(guān)于利用nodeJS+vue圖片上傳的相關(guān)資料,需要的朋友可以參考下2022-04-04

