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

 更新时间:2020年09月04日 09:54:04   作者:前端@小菜  
这篇文章主要介绍了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深度监听(监听对象和数组的改变)与立即执行监听实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue3子组件实现v-model用法的示例代码

    Vue3子组件实现v-model用法的示例代码

    在Vue 3中,实现自定义的input组件并支持v-model绑定,涉及到对modelValue这个默认prop的处理和对应的update:modelValue事件的触发,本文给大家介绍了Vue3子组件实现v-model用法的示例,需要的朋友可以参考下
    2024-04-04
  • Vue2中使用axios的3种方法实例总结

    Vue2中使用axios的3种方法实例总结

    axios从功能上来说就是主要用于我们前端向后端发送请求,是基于http客户端的promise,面向浏览器和nodejs,下面这篇文章主要给大家介绍了关于Vue2中使用axios的3种方法,需要的朋友可以参考下
    2022-09-09
  • 详解vue3结合ts项目中使用mockjs

    详解vue3结合ts项目中使用mockjs

    这篇文章主要为大家介绍了vue3结合ts项目中使用mockjs示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • vue开发中如何在js文件里使用pinia和组件同步

    vue开发中如何在js文件里使用pinia和组件同步

    在JavaScript文件中封装涉及到使用Pinia的方法时,发现Pinia和组件内容并不同步,二者的状态是独立的,解决办法是,在新建对象的时候,将Pinia作为参数传入,本文给大家介绍vue开发中如何在js文件里使用pinia和组件同步,感兴趣的朋友一起看看吧
    2024-10-10
  • VUE 记账凭证模块组件的示例代码

    VUE 记账凭证模块组件的示例代码

    这篇文章主要介绍了VUE记账凭证模块组件的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Vue内部渲染视图的方法

    Vue内部渲染视图的方法

    这篇文章主要介绍了Vue内部渲染视图的方法,本文通过实例代码图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Vue项目中引入ESLint校验代码避免代码错误

    Vue项目中引入ESLint校验代码避免代码错误

    这篇文章主要为大家介绍了Vue项目中引入ESLint插件校验代码避免代码错误的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 如何利用vue+vue-router+elementUI实现简易通讯录

    如何利用vue+vue-router+elementUI实现简易通讯录

    这篇文章主要介绍了如何利用vue+vue-router+elementUI实现简易通讯录,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • vue实现文字转语音功能详解

    vue实现文字转语音功能详解

    这篇文章主要介绍了vue实现文字转语音功能详解的相关资料,需要的朋友可以参考下
    2022-09-09
  • 在组件中修改vuex中state的具体实现方法

    在组件中修改vuex中state的具体实现方法

    在组件中修改 Vuex 中的 state,根据使用的 Vue 版本(Vue 2 或 Vue 3)不同,有不同的操作方式,但总体思路都是借助 Vuex 提供的 mutations 或 actions 来实现,以下分别介绍两种版本下的具体实现方法,需要的朋友可以参考下
    2025-02-02

最新评论