当前位置:首页 > VUE

vue监听实现

2026-02-10 09:19:47VUE

Vue 监听实现方法

使用 watch 选项

在 Vue 组件中,可以通过 watch 选项监听数据变化。当被监听的数据发生变化时,指定的回调函数会被触发。

export default {
  data() {
    return {
      message: 'Hello'
    }
  },
  watch: {
    message(newVal, oldVal) {
      console.log('Message changed from', oldVal, 'to', newVal)
    }
  }
}

立即执行的监听器

如果需要监听器在创建时立即执行一次,可以设置 immediate 选项为 true

watch: {
  message: {
    handler(newVal, oldVal) {
      console.log('Message changed')
    },
    immediate: true
  }
}

深度监听对象

默认情况下,watch 只监听对象引用的变化。如果需要监听对象内部属性的变化,可以设置 deep 选项为 true

watch: {
  user: {
    handler(newVal) {
      console.log('User changed')
    },
    deep: true
  }
}

使用 $watch 方法

除了在组件选项中定义监听器,还可以在组件实例上调用 $watch 方法来动态添加监听器。

vue监听实现

export default {
  created() {
    this.$watch('message', (newVal, oldVal) => {
      console.log('Message changed')
    })
  }
}

计算属性监听

对于需要基于其他数据计算的值,可以使用计算属性。计算属性会自动追踪依赖,并在依赖变化时重新计算。

export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName() {
      return this.firstName + ' ' + this.lastName
    }
  }
}

监听路由变化

在 Vue Router 中,可以通过 watch 来监听路由变化。

vue监听实现

watch: {
  '$route'(to, from) {
    console.log('Route changed from', from.path, 'to', to.path)
  }
}

使用 .sync 修饰符

.sync 修饰符可以实现父子组件之间的双向绑定,本质上是监听 update: 事件。

// 父组件
<ChildComponent :title.sync="pageTitle" />

// 子组件
this.$emit('update:title', newTitle)

监听多个数据源

如果需要监听多个数据源的变化,可以使用数组形式的监听键。

watch: {
  ['data1', 'data2'](newValues, oldValues) {
    console.log('Data changed', newValues, oldValues)
  }
}

取消监听

通过 $watch 方法返回的函数可以取消监听。

const unwatch = this.$watch('message', handler)
unwatch() // 取消监听

以上方法涵盖了 Vue 中实现监听的常见场景,可以根据具体需求选择合适的方式。

标签: vue
分享给朋友:

相关文章

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-lin…

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &l…

vue实现分屏

vue实现分屏

Vue 实现分屏的方法 分屏功能通常用于展示多个独立内容区域,以下是几种常见的实现方式: 使用 CSS Grid 布局 通过 CSS Grid 可以轻松创建分屏布局,在 Vue 组件中直接应用样式…

vue树形实现

vue树形实现

Vue 树形组件实现方法 使用递归组件实现树形结构 递归组件是 Vue 中实现树形结构的常见方法。通过组件调用自身的方式,可以轻松构建多层嵌套的树形结构。 <template> &…

vue实现mouseout

vue实现mouseout

Vue 实现 mouseout 事件的方法 在 Vue 中实现 mouseout 事件可以通过多种方式完成,以下是几种常见的方法: 使用 v-on 指令 Vue 提供了 v-on 指令(或简写为…

vue实现selectable

vue实现selectable

Vue 实现可选择的 Select 组件 在 Vue 中实现一个可选择的 Select 组件,可以通过以下几种方式: 使用原生 HTML select 元素 <template>…