1.vue中监听对象数据属性值的改变,可以使用深度监听
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
data () { return { form: { status: '' , cpufrequency: '' , systemstacksize: '' , scalabilityclass: '' } } }, watch: { form: { // 深度监听 handler(val, oldVal){ console.log( 'currentForm' ,val, oldVal) // 但是这两个值打印出来却都是一样的,因为它们的引用指向同一个对象/数组 }, deep: true } } |
注意:我们应尽量避免在监听方法中更改当前监听对象的属性值,以免再次触发监听函数
2.若只监听某个或部分属性值的变化,则可以配合计算属性computed来解决
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
data () { return { form: { status: '' , cpufrequency: '' , systemstacksize: '' , scalabilityclass: '' } } }, computed: { status() { return this .form.status } }, watch: { status() { console.log( 'currentVal' , this .status) } } |
当然,上面这种方法会多出一个计算属性,并不是最好的方法,通过查看官方api,其实还有一种方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
data () { return { form: { status: '' , cpufrequency: '' , systemstacksize: '' , scalabilityclass: '' } } }, watch: { 'form.status' (val, oldVal) { console.log( 'currentVal' , val) } } |
3.取消监听
var unwatch = vm.$watch('a', cb) // 返回一个取消监听函数
unwatch() // 取消观察函数
4.立即触发监听
我们有时会有这个需求,在页面初始化时执行某个监听。因此,我们可能会在 created 中去调用需要执行的监听代码,但现在我们可以使用 immediate 来实现这个功能。
1
2
3
4
5
6
7
8
|
watch: { 'form.status' () { handler(val, oldVal) { // 执行一些操作 }, immediate: true } } |
补充知识:vue watch监听数据,新老值一样?让其不一样吧!
我就废话不多说了,大家还是直接看代码吧~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
data:{ testData:{ dataInfo:{ a: '我是a' , b: '我是b' } } }, watch: { testData: { handler: (val, olVal) => { console.log( '我变化了' , val, olVal) }, deep: true } } |
如果testData发生了变化,就会打印出val,olVal,但是他们打印出来的结果都是一样的,因为数据同源。虽然可以监听到他的变化,但是要比较数据差异就不行了。如果想要得到不同的值可以结合计算属性。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
data:{ testData:{ dataInfo:{ a: '我是a' , b: '我是b' } } }, watch: { testDataNew: { handler: (val, olVal) => { console.log( '我变化了' , val, olVal) }, deep: true } }, computed: { testDataNew() { return JSON.parse(JSON.stringify( this .testData)) } } |
以上这篇vue深度监听(监听对象和数组的改变)与立即执行监听实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_39025670/article/details/103168264