vue的watch是做什么的

vue中,watch用于监听data里面的数据是否被修改,一旦修改就可以执行一些其他的操作。watch是vue内部提供的一个用于侦听功能的通用的方法,可响应数据的变化,通过特定的数据变化驱动一些操作。

vue的watch是做什么的

本教程操作环境:windows7系统、vue3版,DELL G3电脑。

watch是用来做什么的?

Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

watch是什么?

立即学习“前端免费学习笔记(深入)”;

一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个 property。文档传送

示例:

 export default {data() {return {name: '123'};}}; 

登录后复制

vue的watch是做什么的

watch的使用方法

第一种:常规用法

(1)把要监听的name值看作方法名,来进行监听。【第一种写法】

export default {data() {return {name: '123'};},watch: {name(newVal, oldVal) {console.log('newVal', newVal);// 1234console.log('oldVal', oldVal);// 123}}};

登录后复制

1.png

(2)把要监听的name值看作对象,利用hanler方法来进行监听。【第二种写法】

export default {data() {return {name: '123'};},watch: {name:{handler(newVal,oldVal){console.log('newVal',newVal); // 1234console.log('oldVal',oldVal); // 123}}}};

登录后复制

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

下面,我们就往高级一点的用法上讲。

第二种:高级用法

比如,当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate属性设置为true,结合handler方法使用。

当设置immediate属性为true时,无论值是否发生改变,时刻都会监听;

当设置immediate属性为false时,常规用法,只有值发生改变才会监听。

export default {data() {return {name: '123'};},watch: {name: {handler(newVal, oldVal) {console.log('newVal', newVal);console.log('oldVal', oldVal);},immediate: true}}};

登录后复制

立即执行:

2.png

 值改变时:

3.png

第三种:超高级用法(deep 深度监听)

(1)监听普通变量的变化可以使用以上两种方法,但是要监听变量值是某对象的时候,则不起作用。

例如,我们监听form对象内部属性的变化,是监听不到的。

export default {data() {return {form: {name: '123'}};},watch: {form: {handler(newVal, oldVal) {console.log('newVal', newVal);console.log('oldVal', oldVal);}}}};

登录后复制

4.png

则,从结果来看,我们没有看到任何的输出打印,所以普通的watch方法无法监听到对象内部属性的变化。

那么,我们该怎么办才能监听到对象内部属性的变化呢?

watch方法提供了一个deep属性(深度监听),该属性可以监听到对象内部属性的改变。

export default {data() {return {form: {name: '123'}};},watch: {form: {handler(newVal, oldVal) {console.log('newVal', newVal);console.log('oldVal', oldVal);},deep: true}}};

登录后复制

5.png

设置deep: true 则可以监听到form的变化,如果form有较多属性的话,此时会给form的所有属性都会加上这个监听器,每个属性值的变化都会执行handler。 

当deep属性值为true时,就可以监听到对象属性内部的改变;

当deep属性值为false时,则监听不到。

(2)如果只需要监听对象中的某一个属性值时,我们可以使用:字符串的形式监听对象属性

这个监听过程,不需要使用deep去深度监听,就可以监听对象中某个属性的变化。

export default {data() {return {form: {name: '123'}};},watch: {'form.name': {handler(newVal, oldVal) {console.log('newVal', newVal);console.log('oldVal', oldVal);}}}};

登录后复制

6.png

 第四种:扩展(监听数组)

(1)(一维、多维)数组的变化不需要深度监听

export default {data() {return {name: '123',arr1: [1, 2, 3],arr2: [1, 2, 3, [4, 5]]};},watch: {arr1(newVal, oldVal) {console.log('newVal1', newVal);console.log('oldVal1', oldVal);},arr2(newVal, oldVal) {console.log('newVal2', newVal);console.log('oldVal2', oldVal);}},methods: {inputFn(e) {this.arr1.push(e);this.arr2.push(e);}}};

登录后复制

7.png

 (2)数组对象中对象属性变化监测需要使用deep:true深度监听,多少层内产生变化都可以监测到。

export default {data() {return {name: '123',arr1: [{id: 1,sex: 11}],arr2: [{id: 2,sex: 22,list: [{id: 3,sex: 33}]}]};},watch: {arr1: {handler(newVal, oldVal) {console.log('newVal1', newVal);console.log('oldVal1', oldVal);},deep: true},arr2: {handler(newVal, oldVal) {console.log('newVal2', newVal);console.log('oldVal2', oldVal);},deep: true}},methods: {inputFn(e) {this.arr1[0].sex = e;this.arr2[0].list[0].sex = e;}}};

登录后复制

8.png

 9.png

10.png

(学习视频分享:文档传送、文档传送)

以上就是vue的watch是做什么的的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2924352.html

(0)
上一篇 2025年3月11日 18:55:52
下一篇 2025年3月10日 12:47:56

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue路由模式有哪些

    vue路由模式有:1、hash模式,使用URL的hash值来作为路由,支持所有浏览器;其url路径会出现“#”字符。2、history模式,依赖于HTML5 API(旧浏览器不支持)和HTTP服务端配置,没有后台配置的话,页面刷新时会出现4…

    2025年3月11日
    200
  • 用vue框架有什么好处

    用vue的好处:1、Vue是组件化开发,减少代码的书写,使代码易于理解;2、可以对数据进行双向绑定;3、相比较传统的用超链接进行页面的切换与跳转,Vue使用的是路由,不用刷新页面;4、Vue是单页应用,加载时不用获取所有的数据和dom,提高…

    2025年3月11日
    200
  • vue缓存组件是什么意思

    在vue中,缓存组件是“keep-alive”,是一个抽象组件;它自身不会渲染一个 DOM 元素,也不会出现在组件的父组件链中。缓存组件主要用于保留组件状态或避免重新渲染,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。 本教程…

    2025年3月11日
    200
  • 什么是vue单页面和多页面

    在vue中,单页面全称“SPA单页面应用”,是指只有一个主页面的应用(一个html页面),从而使整个页面更加流畅;单页面应用提供的信息和一些主要内容已经过筛选和控制,可以简单方便地阅读和浏览。多页面全称“MPA多页面应用”,是指包含多个独立…

    2025年3月11日 编程技术
    200
  • vue中的el是指什么简写

    在vue中,el是element的缩写,可称之为挂载点。el的作用是提供一个在页面上已存在的DOM元素作为Vue实例的挂载目标,可以是CSS选择器,也可以是一个HTMLElement实例;在实例挂载之后,元素可以用“vm.$el”访问。 本…

    2025年3月11日
    200
  • vue中mixin和组件的区别是什么

    mixin和组件的区别:组件在引用之后相当于在父组件内开辟了一块单独的空间,来根据父组件props过来的值进行相应的操作,单本质上两者还是泾渭分明,相对独立;而mixins在引入组件之后相当于父组件的各种属性方法都被扩充了,会将组件内部的内…

    2025年3月11日
    200
  • vue页面渲染是同步还是异步

    vue页面渲染是异步的。vue采用的是异步渲染,这样可以提升性能;如果不采用异步更新,在每次更新数据都会对当前组件进行重新渲染,为了性能考虑,Vue会在本轮数据更新后,再去异步更新视图。 本教程操作环境:windows7系统、vue3版,D…

    2025年3月11日
    200
  • vue移动端用什么框架

    vue移动端框架有:1、Vant,基于有赞统一的规范实现的Vue组件库;2、Mint UI,是一个vue移动端组件库;3、Wot Design;4、NutUI;5、JDDUI;6、vux;7、vonic;8、Muse-UI;9、Cube-U…

    2025年3月11日 编程技术
    200
  • vue的$refs是什么意思

    在vue中,$refs是一个对象,持有注册过ref attribute的所有DOM元素和组件实例。ref被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的“$refs”对象上;如果在普通的DOM元素上使用,引用指向的就是DOM元素…

    2025年3月11日
    200
  • vue 对象的侦听属性用什么表示

    vue对象的侦听属性用“watch”表示。所谓监听就是对内置对象的状态或者属性变化进行监听并且做出反应的响应,监听属性,意思就是可以监视其他数据的变化。vue中监听属性有两种写法:1、在“new Vue()”中传入watch配置;2、通过“…

    2025年3月11日
    200

发表回复

登录后才能评论