Vue不能檢測陣列或物件變動問題的解決

2022-09-15 18:18:12 字數 1232 閱讀 9215

"en

">class="

wrap

">

想實現的效果是點選 li 看 vm.nymbers[index] 是否存在,不存在設定為1,存在的話加1。

點選之後數字並沒有在view層更新,而通過console列印發現資料更新了,只是view層沒有及時的檢測到。

再看乙個栗子的:

"en

">class="

wrap

">

可以看到這裡的view層能及時得到更新,但是到了陣列**為什麼就不可以了呢?

來看vue2.0官方的文件說明:

由於 j**ascript 的限制,vue 不能檢測以下變動的陣列:

當你利用索引直接設定乙個項時,例如:vm.items[indexofitem] = newvalue

當你修改陣列的長度時,例如:vm.items.length = newlength

為了解決第一類問題,以下兩種方式都可以實現和 vm.items[indexofitem] = newvalue 相同的效果,同時也將觸發狀態更新:

//

vue.set

vue.set

(example1.items, indexofitem, newvalue)

example1.items.splice(indexofitem, 1, newvalue)

你還可以使用vm.$set例項方法,它只是全域性vue.set的別名。

還有由於 j**ascript 的限制,vue 不能檢測物件屬性的新增或刪除:

var vm = new

vue(

})//

`vm.a` 現在是響應式的

vm.b = 2

//`vm.b` 不是響應式的

對於已經建立的例項,vue 不能動態新增根級別的響應式屬性。但是,可以使用vue.set(object, key, value)方法向巢狀物件新增響應式屬性。例如,對於:

var vm = new

vue(

}})

//如果你想新增新的響應式屬性應該這樣做:

this.userprofile = object.assign({}, this

.userprofile, )

Vue 不能檢測以下陣列的變動的解決辦法

vue 不能檢測以下陣列的變動 當你利用索引直接設定乙個陣列項時,例如 vm.items indexofitem newvalue 當你修改陣列的長度時,例如 vm.items.length newlength 舉個例子 var vm new vue vm.items 1 x 不是響應性的 vm.i...

Vue不能檢測陣列和物件的變化

上班第一天沒事做寫篇部落格。前段時間出去面試了下,vue不能檢測陣列和物件的變化 這個問題很高頻提起,今天來聊下這個問題 先看官網文件說明 情況一 新增的值不會觸發響應 刪除同理 情況二 原有的值改變會觸發響應 情況三 vue提供的方法 set可以觸發響應 以上3個例子總結了物件增 刪,模板沒有響應...

vue中陣列變動不被監測問題

前兩天去玩了,接下來還有挺多學習目標的。今天來寫的之前遇到的問題好了。在之前的專案中,有時候需要對乙個陣列的某個元素進行改動 如 list 2 b 卻發現改動了在檢視上確沒有變化,這是為什麼呢?這個問題要如何解決呢?讓我們來看看vue中資料劫持的實現。來自 var data observe data...