watch监听

# watch监听

虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。Vue通过watch选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的,在实际开发中可以解决自定义封装组件或是插件,异步初始化数据获取不到的问题。

看一样看watch基本用法,代码如下:

 <input type="text" :value="name"/><button type="button" @click="name='李四'">改名</button>
<script>
    new Vue({
        el:"#app",
        data(){
            return {
                name:"张三"
            }
        },
        watch:{
            name(newVal,oldVal){
                console.log("更新后:"+newVal,"更新前:"+oldVal);
            }
        }
    })
</script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

watch监听还可以监听计算属性,代码如下:

<input type="text" :value="name"/><button type="button" @click="name='李四'">改名</button>
<script>
    new Vue({
        el:"#app",
        data(){
            return {
                name:"张三"
            }
        },
        computed:{
            getName(){
                return this.name;
            }
        },
        watch:{
            getName(newVal,oldVal){
                console.log("更新后:"+newVal,"更新前:"+oldVal);
            }
        }
    })

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

如果出现对象嵌套,想改变对象里面的某一属性值时,可以这样写,代码如下:

<input type="text" :value="classify.children.title"/><button type="button" @click="classify.children.title='猪肉串'">更新</button>
new Vue({
        el:"#app",
        data(){
            return {
                classify:{
                    title:"肉类",
                    children:{
                        title:"羊肉串"
                    }
                }
            }
        },
        watch:{
            "classify.children.title"(newVal,oldVal){
                console.log("更新后:"+newVal,"更新前:"+oldVal);
            }
        }
    })

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

在实际开发中还会遇到数组多层嵌套,这时要用watch的深度监听功能,来监听数组的变化,代码如下:

watch:{
            classifys:{
                handler(val){
                    console.log(JSON.stringify(val));
                },
                deep:true//深度监听
            }
        }

1
2
3
4
5
6
7
8
9

# 计算属性 vs 方法 vs 侦听属性

API (opens new window)

如果一个功能同时可以使用计算属性(computed)、方法(methods)、侦听属性(watch)来实现的时候推荐使用计算属性。

计算属性 方法 侦听属性
计算属性是基于它们的响应式依赖进行缓存的 每当触发重新渲染时,调用方法将总会再次执行函数 有缓存,但相比计算属性,实现起来要复杂很多。
上次更新: 2022/05/30 12:17:36
最近更新
01
关于我
07-14
02
科学上网
11-15
03
OSS+CDN
09-23
更多文章>
极昼青春
买辣椒也用券