Vue watch监听使用的几种方法

 更新时间:2022年12月22日 10:31:25   作者:script~  
watch是由用户定义的数据监听,当监听的属性发生改变就会触发回调,这项配置在业务中是很常用。在面试时,也是必问知识点,一般会用作和computed进行比较。那么本文就来带大家从源码理解watch的工作流程,以及依赖收集和深度监听的实现

一、watch使用的几种方法

1、 通过 watch 监听 msg 数据的变化。

watch: {
    msg(oldValue, newValue) {
        console.log(oldValue)
        console.log(newValue)
    }
}

2、通过 watch 监听 obj数据的变化。(深度监听 deep)

data() {
    return {
        obj: {
            'name': "赵",
            'age': 18
        },
    }
},
watch: {
    obj: {
        handler(oldValue,newVal) {
             console.log(oldValue)
             console.log(newValue)
        },
        deep: true  // 深度监听
    }
}

3、通过 watch 监听 data 数据的变化,数据发生变化时,执行 change 方法

watch: {
    data: 'change' // 值可以为methods的方法名
},
methods: {
    change(oldVal,newVal){
   console.log(oldVal,newVal)
  }
}

二、watch中的immediate与handler和deep属性

1、immediate属性

使用watch时有一个特点,就是当值第一次绑定时,不会执行监听函数,只有值发生改变时才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。

2、handler属性

watch中需要具体执行的方法

3、deep属性

当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,此时就需要deep属性对对象进行深度监听,数组字符串一般不需要

data() {
    return {
        obj: {
            'name': "王",
            'age': 18
        },
    }
},
watch: {
    obj: {
        // 执行方法
        handler(oldValue,newVal) {
             console.log(oldValue)
             console.log(newValue)
        },
        deep: true, // 深度监听
        immediate: true  // 第一次改变就执行
    }
   // 如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:
    'obj.name': {
        // 执行方法
        handler(oldValue,newVal) {
             console.log(oldValue)
             console.log(newValue)
        },
        deep: true, // 深度监听
        immediate: true  // 第一次改变就执行
    }
}

到此这篇关于Vue watch监听使用的几种方法的文章就介绍到这了,更多相关Vue watch监听内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue项目配置eslint保存自动格式化问题

    vue项目配置eslint保存自动格式化问题

    这篇文章主要介绍了vue项目配置eslint保存自动格式化问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue跳转页面携带参数并且立即执行方法

    vue跳转页面携带参数并且立即执行方法

    这篇文章主要介绍了vue跳转页面携带参数并且立即执行方法,首先定义跳转函数,结合实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-10-10
  • 详解vue.js数据传递以及数据分发slot

    详解vue.js数据传递以及数据分发slot

    本篇文章给大家通过代码实例分析了vue.js数据传递以及数据分发slot的相关知识,有这方面兴趣的朋友参考下吧。
    2018-01-01
  • Vue自定义指令拖拽功能示例

    Vue自定义指令拖拽功能示例

    本文给大家分享vue自定义指令拖拽功能及自定义键盘信息,非常不错,具有参考借鉴价值,需要的的朋友参考下
    2017-02-02
  • Vue+ElementUI使用vue-pdf实现预览功能

    Vue+ElementUI使用vue-pdf实现预览功能

    这篇文章主要为大家详细介绍了Vue+ElementUI使用vue-pdf实现预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • vue3中通过ref获取元素节点的实现

    vue3中通过ref获取元素节点的实现

    这篇文章主要介绍了vue3中通过ref获取元素节点的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue3.0中的computed写法

    vue3.0中的computed写法

    这篇文章主要介绍了vue3.0中的computed写法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Vue父子组件属性传递实现方法详解

    Vue父子组件属性传递实现方法详解

    这篇文章主要介绍了Vue父子组件属性传递实现方法,我们主要从案例出发,用Vue3的写法写父子组件之间的属性传递,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • Vue router传递参数并解决刷新页面参数丢失问题

    Vue router传递参数并解决刷新页面参数丢失问题

    这篇文章主要介绍了Vue router传递参数并解决刷新页面参数丢失问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • vue3数据可视化实现数字滚动特效代码

    vue3数据可视化实现数字滚动特效代码

    这篇文章主要介绍了vue3数据可视化实现数字滚动特效,实现思路是使用Vue.component定义公共组件,使用window.requestAnimationFrame(首选,次选setTimeout)来循环数字动画,详细代码跟随小编一起看看吧
    2022-09-09

最新评论