watch事件监听三种用法和监听多个值

第一种 普通监听

<input type="text" v-model="userName"/>  
//监听   当userName值发生变化时触发
watch: {
    userName (newName, oldName) {
        console.log(newName)
    }
}

第二种 第一种有一个缺点 就是当值第一次绑定的时候 不会执行监听函数,
只有当值改变的时候 才会执行,如果想在第一次绑定的时候执行此监听函数 则需要 设置
immediate为true

<input type="text" v-model="userName"/>  
watch: {
    userName: {
        handler (newName, oldName) {
            console.log(newName)
        },
        immediate: true
    }
}

第三种深度监听 当要监听对象或数组的时候需要添加deep:true属性

<input type="text" v-model="cityName.name" />
data (){
    return {
        cityName: {name:'北京'}
    }
},
watch: {
    cityName: {
        handler(newName, oldName) {
            console.log(newName)
        },
        immediate: true,
        deep: true
    }
}

监听多个值

computed: {
    dateRange() {
      let {wd, sd, cgq, jzc, learn, tb, lccg, zglc, zdlc, kt, cfj, bgd} = this
      return {wd, sd, cgq, jzc, learn, tb, lccg, zglc, zdlc, kt, cfj, bgd}
    }
},
watch: {
  dateRange: {
    handler(vul) {
     console.log(vul)
    },
    // immediate: true,
    deep: true
  }
},
### 如何在 Vue3 中使用 `watch` 同时监听多个Vue3 中,可以通过组合方式实现对多个的同时监听。以下是具体的实现方法: #### 方法一:分别定义多个 `watch` 可以分别为每个需要监听单独设置一个 `watch` 监听器[^1]。 ```javascript import { ref, watch } from 'vue'; const name = ref('Alice'); const age = ref(25); // 监听 name 的变化 watch(name, (newValue, oldValue) => { console.log(`name changed: ${oldValue} -> ${newValue}`); }); // 监听 age 的变化 watch(age, (newValue, oldValue) => { console.log(`age changed: ${oldValue} -> ${newValue}`); }); ``` 这种方法简单直观,适合于不同变量之间逻辑独立的情况。 --- #### 方法二:使用数组形式监听多个 如果希望在一个回调函数中处理多个的变化,则可以将这些作为数组传递给 `watch`。 ```javascript import { ref, watch } from 'vue'; const name = ref('Alice'); const age = ref(25); // 使用数组形式监听多个 watch([name, age], ([newName, newAge], [oldName, oldAge]) => { console.log(`name changed: ${oldName} -> ${newName}, age changed: ${oldAge} -> ${newAge}`); }); ``` 此方法更加紧凑,尤其当多个之间的变化逻辑有关联时更为适用。 --- #### 方法三:监听计算属性或复合表达式 对于更复杂的场景,可以直接监听基于多个派生出来的计算结果[^4]。 ```javascript import { ref, computed, watch } from 'vue'; const firstName = ref('John'); const lastName = ref('Doe'); // 创建一个计算属性表示全名 const fullName = computed(() => `${firstName.value} ${lastName.value}`); // 监听计算属性的变化 watch(fullName, (newFullName, oldFullName) => { console.log(`Full Name Changed: ${oldFullName} -> ${newFullName}`); }); ``` 这种方式非常适合用于监控依赖多变量的结果。 --- #### 注意事项 - 如果需要立即触发监听器中的回调函数,可以在第三个参数传入 `{ immediate: true }` 配置项。 ```javascript watch([name, age], ([newName, newAge], [oldName, oldAge]) => { console.log(`Immediate execution`); }, { immediate: true }); ``` - 对于性能敏感的应用程序,应考虑适时停止不必要的监听操作[^2]。 --- ### 示例总结 以上三种方法展示了如何在 Vue3 中同时监听多个。具体选择哪种方式取决于实际需求业务复杂度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值