深入理解vue.js中$watch的oldvalue與newValue
$watch中的oldvalue和newValue
大家都知道,在vue.js中給我們提供了$watch的方法來做對象變化的監(jiān)聽,而且在callback中會返回兩個對象,分別是oldValue和newValue.
顧名思義,這兩個對象就是對象發(fā)生變化前后的值。
但是在使用過程中我發(fā)現(xiàn)這兩個值并不總是預(yù)期的。下面來一起看看詳細的介紹:
定義data的值
data: { arr: [{ name: '笨笨', address: '上海' }, { name: '笨笨熊', address: '北京' }], obj: { name: '呆呆', address: '蘇州' }, str: '哈哈哈' }
定義watch
watch: { arr: function(newValue, oldValue) { console.log(newValue, oldValue) console.log(JSON.stringify(oldValue) === JSON.stringify(newValue)) }, obj: function(newValue, oldValue) { console.log(newValue, oldValue) console.log(JSON.stringify(oldValue) === JSON.stringify(newValue)) }, str: function(newValue, oldValue) { console.log(newValue, oldValue) console.log(JSON.stringify(oldValue) === JSON.stringify(newValue)) }, }
定義事件觸發(fā)
methods: { test() { this.arr.push({ name: 9 }) this.$set(this.obj, 'i', 0) this.str = '' }, test1() { this.arr = [{ name: '000' }] this.obj = { name: 999 } this.str = '123' } }
測試結(jié)果為
- 對數(shù)組進行push操作和對Obj進行$set操作,雖然都可能觸發(fā)watch事件,但是在callback返回的結(jié)果中,oldValue和newValue相同。字符串對象如預(yù)期返回
- 在對數(shù)組和Obj統(tǒng)一進行賦值操作時,watch觸發(fā)并且oldValue和newValue如預(yù)期返回
關(guān)于watch的其他測試
不能夠觸發(fā)監(jiān)聽的
1、數(shù)組
修改某個下標的某個屬性的值
使用原生delete刪除某個屬性
對某個下標新增一個屬性(不使用$set)
對某個下標重新賦值
2、對象
修改某個屬性的值(但是會觸發(fā)這個屬性的監(jiān)聽)
新增一個屬性(不使用$set)
原生delete刪除某個屬性
以上總結(jié)可能存在不足
萬金油實現(xiàn)watch監(jiān)聽
在修改完數(shù)據(jù)后添加這樣一段代碼
array
arr = [...arr]
obj
obj = {...obj}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
VUE?Element修改el-input和el-select長度的具體步驟
這篇文章主要給大家介紹了關(guān)于VUE?Element修改el-input和el-select長度的具體步驟,文中通過代碼介紹的非常詳細,對大家學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-12-12使用WebSocket+SpringBoot+Vue搭建簡易網(wǎng)頁聊天室的實現(xiàn)代碼
這篇文章主要介紹了使用WebSocket+SpringBoot+Vue搭建簡易網(wǎng)頁聊天室的實現(xiàn),具體的步驟如下,需要的朋友可以參考下2023-03-03詳解如何在 vue 項目里正確地引用 jquery 和 jquery-ui的插件
本篇文章主要介紹了詳解如何在 vue 項目里正確地引用 jquery 和 jquery-ui的插件,具有一定的參考價值,有興趣的可以了解一下2017-06-06vue中v-for和v-if一起使用之使用compute的示例代碼
這篇文章主要介紹了vue中v-for和v-if一起使用之使用compute的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05Vue使用electron轉(zhuǎn)換項目成桌面應(yīng)用方法介紹
Electron也可以快速地將你的網(wǎng)站打包成一個原生應(yīng)用發(fā)布,下面這篇文章主要給大家介紹了關(guān)于Vue和React中快速使用Electron的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11