Vue----watch 侦听器

简介: Vue----watch 侦听器

1 watch 侦听器

watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作。

例如,监视用户名的变化并发起请求,判断用户名是否可用。

2 watch 侦听器的基本语法

开发者需要在 watch 节点下,定义自己的侦听器。

<template>
  <div>
    <h1>App 组件</h1>
    <input type="text" v-model="content">
  </div>
</template>
<script>
export default {
  name: 'App',
  data() {
    return {
      content: ''
    }
  },
  watch: {
    // 监听 content 的变化
    // 第一个参数为变化后的值,第二个参数为变化前的值
    content( newVal, oldVal ) {
      console.log( 'newVal:'+newVal+' -- oldVal:'+oldVal )
    }
  }
}
</script>
<style>
</style>

3 使用 watch 检测用户名是否可用

监听 username 值的变化,并使用 axios 发起 Ajax 请求,检测当前输入的用户名是否可用。

安装axios出现报错:

解决方案

代码

<template>
  <div>
    <h1>App 组件</h1>
    <input type="text" v-model="username">
  </div>
</template>
<script>
import axios from 'axios'
export default {
  name: 'App',
  data() {
    return {
      username: ''
    }
  },
  watch: {
    // 监听 content 的变化
    // 第一个参数为变化后的值,第二个参数为变化前的值
    async username( newVal, oldVal ) {
      console.log( 'newVal:'+newVal+' -- oldVal:'+oldVal )
      const { data: res } = await axios.get( 'https://www.escook.cn/api/finduser/'+newVal )
      console.log( res )
    }
  }
}
</script>
<style>
</style>

4 immediate 选项

默认情况下,组件在初次加载完毕后不会调用 watch 侦听器。如果想让 watch 侦听器立即被调用,则需要使用 immediate 选项。

<template>
  <div>
    <h1>App 组件</h1>
    <input type="text" v-model="username">
  </div>
</template>
<script>
import axios from 'axios'
export default {
  name: 'App',
  data() {
    return {
      username: '1111'
    }
  },
  watch: {
    // 监听 username 的变化
    username: {
      // handler 属性是固定写法,当 username 变化时候会调用 handler
      handler( newVal, oldVal ) {
        console.log( newVal, oldVal )
      },
      // 组件加载完成立即调用一次
      immediate: true
    }
  }
}
</script>
<style>
</style

5 deep 选项

当 watch 侦听的是一个对象,如果对象中的属性值发生了变化,则无法被监听到。对象的指向没有改变。要监听对象中属性的变化,此时需要使用 deep 选项。

未加deep

<template>
  <div>
    <h1>App 组件</h1>
    <input type="text" v-model="info.name">
  </div>
</template>
<script>
import axios from 'axios'
export default {
  name: 'App',
  data() {
    return {
      info: {
        name: 'zs',
        age: 14
      }
    }
  },
  watch: {
    info: {
      handler(newVal, oldVal) {
        console.log(newVal, oldVal)
      },
      immediate: true
    }
  }
}
</script>
<style>
</style>

加deep

<template>
  <div>
    <h1>App 组件</h1>
    <input type="text" v-model="info.name">
  </div>
</template>
<script>
import axios from 'axios'
export default {
  name: 'App',
  data() {
    return {
      info: {
        name: 'zs',
        age: 14
      }
    }
  },
  watch: {
    info: {
      handler(newVal, oldVal) {
        console.log(newVal, oldVal)
      },
      immediate: true,
      deep: true
    }
  }
}
</script>
<style>
</style>

6 监听对象单个属性的变化

如果只想监听对象中单个属性的变化:

<template>
  <div>
    <h1>App 组件</h1>
    <input type="text" v-model="info.name">
  </div>
</template>
<script>
import axios from 'axios'
export default {
  name: 'App',
  data() {
    return {
      info: {
        name: 'zs',
        age: 14
      }
    }
  },
  watch: {
    // 必须使用字符串
    'info.name': {
      handler(newVal, oldVal) {
        console.log(newVal, oldVal)
      },
      immediate: true
    }
  }
}
</script>
<style>
</style>

7 计算属性 vs 侦听器

  1. 计算属性和侦听器侧重的应用场景不同:
  2. 计算属性侧重于 监听多个值 的变化,最终计算并 返回一个新值
  3. 侦听器侧重于监听 单个数据 的变化,最终 执行特定的业务处理 ,不需要有任何返回值


相关文章
|
7月前
|
JavaScript
Vue中侦听器watch时,调用this时出现undefined问题
Vue中侦听器watch时,调用this时出现undefined问题
333 0
Vue中侦听器watch时,调用this时出现undefined问题
|
2月前
|
JavaScript
vue3,使用watch监听props中的数据
【10月更文挑战第3天】
1687 2
|
7月前
|
存储 缓存 JavaScript
Vue3.0监听器watch与watchEffect
Vue3.0监听器watch与watchEffect
116 6
|
7月前
|
缓存 JavaScript 前端开发
Vue的计算属性和侦听器:computed和watch的使用
【4月更文挑战第24天】Vue.js框架中的计算属性和侦听器是处理数据变化的关键特性。计算属性(computed)基于依赖缓存,仅在相关数据改变时重新计算,适合处理复杂逻辑。例如,计算总价可基于价格和数量动态更新。而侦听器(watch)在数据变化时执行回调,适用于异步操作和开销大的任务。计算属性与侦听器的主要区别在于缓存机制和应用场景,前者用于同步计算,后者用于响应数据变化后的特殊操作。理解这两者有助于优化Vue应用的性能。
|
7月前
|
JavaScript
Vue中$watch()方法和watch属性的区别
Vue中$watch()方法和watch属性的区别
183 1
|
JavaScript 开发者
VUE学习笔记--侦听器
VUE学习笔记--侦听器
vue3中watch监听不是你想的那样简单
vue3中watch监听不是你想的那样简单
Vue3 watch监听reactive中的属性变化
Vue3 watch监听reactive中的属性变化
288 0
|
JavaScript
vue中的watch监听
vue中的watch监听
113 0