vue中的watch使用

基本概念:

​ 观察 Vue 实例上的一个表达式或者一个计算属性的变化。回调函数得到的参数为新值和旧值,在回调函数中可以进行一些异步操作或开销较大的操作。表达式只接受简单的键路径。对于更复杂的表达式,可以用一个函数取代。

​ 简单理解就是通过Vue实例上的数据变化去进行相应的操作,以满足需求。

基本数据类型的监听

 <div id="app">
        <input type="text" v-model="text1">
        <p>{{text2}}</p>
        <button @click="change">普通按钮</button>
    </div>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.2/vue.min.js"></script>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                text1:'',
                text2: ''
            },
            watch:{
                text1(newV,oldV){
                    console.log(newV,oldV);
                    this.text2 = newV;
                    
                }
            },
            methods:{
                change(){
                    this.text1 += 1;
                    
                }
            }
        })
    </script>

在这里插入图片描述

对象的监听

对象的监听需要使用handler函数进行监听

注意:在变更 (不是替换) 对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 并不会保留变更之前值的副本。

可以添加两个选项:

deep 值为一个布尔值,添加该选项为true才能发现对象内部键值的变化

immediate 值为一个布尔值, 添加该选项为true表示立即以当前表达式触发一次回调

添加immediate为true时:只会在初始化时触发一次,之后改变都不会触发
<script>
        var vm = new Vue({
            el:'#app',
            data:{
                object:{
                    a : 12,
                    b : 13
                }
            },
            watch:{
                object : {
                    handler(newV , oldV) {
                        console.log(newV)
                        if(newV.a >= 15) {
                            console.log(123)
                        }
                    },
                    // deep: true,
                    immediate: true
                }    
            },
            methods:{
                change(){
                    this.object.a++
                    
                }
            }
        })
    </script>

在这里插入图片描述

添加deep:true 同时,在一定条件下执行某些操作:
<script>
        var vm = new Vue({
            el:'#app',
            data:{
                object:{
                    a : 12,
                    b : 13
                }
            },
            watch:{
                object : {
                    handler(newV , oldV) {
                        console.log(newV)
                        if(newV.a >= 15) {
                            console.log(123)
                        }
                    },
                    deep: true,
                    immediate: true
                }    
            },
            methods:{
                change(){
                    this.object.a++
                    
                }
            }
        })
    </script>

为什么图中的object.a是16呢,因为对象保存的是引用值,又点击了一次按钮,此时object已经变成了{ a: 16 , b : 13}

在这里插入图片描述

监听对象中的某个值:
<div id="app">
        
        <button @click="change">普通按钮</button>
    </div>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.2/vue.min.js"></script>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                object:{
                    a : 12,
                    b : 13
                }
            },
            watch:{ 
                'object.a': {
                    handler(newV){
                        console.log(newV);
                    },
                    immediate : true
                }
            },
            methods:{
                change(){
                    this.object.a++
                    
                }
            }
        })
    </script>

在这里插入图片描述

当然了,在一个需求中发现路由对象也可以进行监听,分享代码给大家

watch : {
        $route: {     //监视路由
            handler(newV , oldV) {
                const path = newV.path;  //当路由发生变化时,是可以监听到变化的,然后进行相应的操作就好了
                let idx = this.timeLineList.findIndex(item  => {
                    return item.path == path
                });
                this.timeIndex = idx;
            },
            immediate: true,
            deep: true
        }

    },
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 3watch使用方式有所改变Vue 3引入了一个新的API即`watchEffect`,它可以用来监听响应式数据的变化并执行相应的操作。 `Effect`函数接受一个回调函数作为参数,该调函数会在响应式数据发生化时被调用。在回调函数,你可以执行任何需要的操作,比如更新DOM、发送网络请求等。 下面是一个使用`Effect`的示例: ```javascript import reactive, watchEffect } from 'vue'; const state = reactive({ count: 0, }); watchEffect(() => { console.log('count changed:', state.count); }); // 修改count的值 state.count++; // 输出:count changed: 1 state.count++; // 输出:count changed: 2 ``` 在上面的示例,我们创建了一个响应式对象`state`,其包含一个属性`count`。然后,我们使用`watchEffect`来监听`state.count`的变化,并在每次变化时打印出新的值。 除了`watchEffect`,Vue 3还提供了`watch`函数,它可以用来监听指定的响应式数据或计算属性的变化。与Vue 2的`$watch`方法类似,你可以通过传递一个回调函数和可选的配置选项来使用它。 下面是一个使用`watch`的示例: ```javascript import { reactive, watch } from 'vue'; const state = reactive({ count: 0, }); watch( () => state.count, (newValue, oldValue) => { console.log('count changed:', newValue); } ); // 修改count的值 state.count++; // 输出:count changed: 1 state.count++; // 输出:count changed: 2 ``` 在上面的示例,我们使用`watch`来监听`state.count`的变化,并在每次变化时打印出新的值。回调函数的第一个参数是新的值,第二个参数是旧的值。 总结一下,Vue 3watch使用方式有两种:`watchEffect`和`watch`。`watchEffect`用于监听响应式数据的变化,而`watch`用于监听指定的响应式数据或计算属性的变化。 --问题--: 1. Vue 3watch有哪些使用方式? 2 如何使用watchEffect来监听响应式数据的变化? 3. 如何使用watch来监听指定的响应式数据或计算属性的变化?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值