vue深度监听(监听对象和数组的改变)与立即执行监听实例

1.vue中监听对象数据属性值的改变,可以使用深度监听

data () {

return {

form: {

status: '',

cpufrequency: '',

systemstacksize: '',

scalabilityclass: ''

}

}

},

watch: {

form: { // 深度监听

handler(val, oldVal){

console.log('currentForm',val, oldVal)

// 但是这两个值打印出来却都是一样的,因为它们的引用指向同一个对象/数组

},

deep:true

}

}

注意:我们应尽量避免在监听方法中更改当前监听对象的属性值,以免再次触发监听函数

2.若只监听某个或部分属性值的变化,则可以配合计算属性computed来解决

data () {

return {

form: {

status: '',

cpufrequency: '',

systemstacksize: '',

scalabilityclass: ''

}

}

},

computed: {

status() {

return this.form.status

}

},

watch: {

status() {

console.log('currentVal', this.status)

}

}

当然,上面这种方法会多出一个计算属性,并不是最好的方法,通过查看官方api,其实还有一种方法:

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 来实现这个功能。

watch: {

'form.status'() {

handler(val, oldVal) {

// 执行一些操作

},

immediate: true

}

}

补充知识:vue watch监听数据,新老值一样?让其不一样吧!

我就废话不多说了,大家还是直接看代码吧~

data:{

testData:{

dataInfo:{

a: '我是a',

b: '我是b'

}

}

},

watch: {

testData: {

handler: (val, olVal) => {

console.log('我变化了', val, olVal)

},

deep: true

}

}

如果testData发生了变化,就会打印出val,olVal,但是他们打印出来的结果都是一样的,因为数据同源。虽然可以监听到他的变化,但是要比较数据差异就不行了。如果想要得到不同的值可以结合计算属性。

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深度监听(监听对象和数组的改变)与立即执行监听实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 vue深度监听(监听对象和数组的改变)与立即执行监听实例 的全部内容, 来源链接: www.h5w3.com/238006.html

回到顶部