服务器之家

服务器之家 > 正文

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

时间:2021-09-14 16:39     来源/作者:前端@小菜

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

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部