藏宝游

 找回密码
 立即注册
查看: 77|回复: 0

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

[复制链接]
  • TA的每日心情
    无聊
    2024-3-8 09:16
  • 签到天数: 445 天

    [LV.9]登峰造极

    灌水成绩
    22
    521
    4765
    主题
    帖子
    积分

    等级头衔

    ID : 4

    版主

    积分成就 威望 : 0
    贡献 : 0
    杰币 : 4173
    在线时间 : 101 小时
    注册时间 : 2022-1-8
    最后登录 : 2024-3-8

    荣誉勋章
    发表于 2024-3-10 13:19:19 | 显示全部楼层 |阅读模式
    1.vue中监听对象数据属性值的改变,可以使用深度监听
    1. data () {  return {   form: {    status: '',    cpufrequency: '',    systemstacksize: '',    scalabilityclass: ''   }  } }, watch: {  form: { // 深度监听   handler(val, oldVal){    console.log('currentForm',val, oldVal)    // 但是这两个值打印出来却都是一样的,因为它们的引用指向同一个对象/数组   },   deep:true  } }
    复制代码
    注意:我们应尽量避免在监听方法中更改当前监听对象的属性值,以免再次触发监听函数
    2.若只监听某个或部分属性值的变化,则可以配合计算属性computed来解决
    1. data () {  return {   form: {    status: '',    cpufrequency: '',    systemstacksize: '',    scalabilityclass: ''   }  } }, computed: {  status() {   return this.form.status  } }, watch: {  status() {   console.log('currentVal', this.status)  } }
    复制代码
    当然,上面这种方法会多出一个计算属性,并不是最好的方法,通过查看官方api,其实还有一种方法:
    1. 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. watch: {  'form.status'() {   handler(val, oldVal) {    // 执行一些操作   },   immediate: true  } }
    复制代码
    补充知识:vue watch监听数据,新老值一样?让其不一样吧!
    我就废话不多说了,大家还是直接看代码吧~
    1. data:{    testData:{      dataInfo:{        a: '我是a',        b: '我是b'      }    }  },  watch: {   testData: {    handler: (val, olVal) => {     console.log('我变化了', val, olVal)    },    deep: true   }  }
    复制代码
    如果testData发生了变化,就会打印出val,olVal,但是他们打印出来的结果都是一样的,因为数据同源。虽然可以监听到他的变化,但是要比较数据差异就不行了。如果想要得到不同的值可以结合计算属性。
    1.   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://www.jb51.net/article/194889.htm
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|RSS|藏宝游 ( 豫ICP备2021017492号 )|网站地图

    GMT+8, 2024-4-29 06:42 , Processed in 0.026969 second(s), 10 queries , Redis On.

    Powered by Discuz! X3.4

    本站不储存任何资源,所有资源均来自用户分享的网盘链接。
    本站为非盈利性站点,不会收取任何费用,所有内容不作为商业行为。

    快速回复 返回顶部 返回列表