当前位置:首页 > VUE

vue实现监听

2026-01-07 22:17:19VUE

监听数据变化

在Vue中,可以通过watch选项或$watch方法监听数据的变化。watch适用于组件选项内声明式监听,$watch适用于动态监听。

// 选项式API
export default {
  data() {
    return {
      message: 'Hello'
    }
  },
  watch: {
    message(newVal, oldVal) {
      console.log('Message changed:', oldVal, '->', newVal)
    }
  }
}
// 组合式API
import { ref, watch } from 'vue'

const message = ref('Hello')
watch(message, (newVal, oldVal) => {
  console.log('Message changed:', oldVal, '->', newVal)
})

监听对象属性

监听对象属性需要使用深度监听或指定具体路径。Vue默认不深度监听对象内部变化。

watch: {
  'user.name': {
    handler(newVal, oldVal) {
      console.log('Name changed:', oldVal, '->', newVal)
    },
    immediate: true // 立即触发
  },
  user: {
    handler(newVal) {
      console.log('User object changed:', newVal)
    },
    deep: true // 深度监听
  }
}

监听多个数据源

使用数组可以同时监听多个响应式数据源,回调参数也会是数组形式。

vue实现监听

watch([firstName, lastName], ([newFirst, newLast], [oldFirst, oldLast]) => {
  console.log('Names changed:', oldFirst, oldLast, '->', newFirst, newLast)
})

监听路由变化

通过watch可以监听$route对象的变化,常用于路由参数变化时的数据更新。

watch: {
  '$route'(to, from) {
    if (to.params.id !== from.params.id) {
      this.fetchData(to.params.id)
    }
  }
}

计算属性监听

计算属性会自动追踪依赖,当依赖变化时会重新计算。适合派生状态的监听。

vue实现监听

computed: {
  fullName() {
    return this.firstName + ' ' + this.lastName
  }
}

事件监听

组件可以通过$on方法监听自定义事件,或使用v-on指令监听DOM事件。

<template>
  <button @click="handleClick">Click</button>
  <child-component @custom-event="handleCustomEvent" />
</template>

<script>
methods: {
  handleClick() {
    console.log('Button clicked')
  },
  handleCustomEvent(payload) {
    console.log('Custom event received:', payload)
  }
}
</script>

生命周期钩子监听

Vue提供了一系列生命周期钩子,可以监听组件不同阶段的状态变化。

export default {
  created() {
    console.log('Component created')
  },
  mounted() {
    console.log('Component mounted')
  },
  updated() {
    console.log('Component updated')
  },
  destroyed() {
    console.log('Component destroyed')
  }
}

第三方库集成

对于复杂状态管理,可以集成Vuex或Pinia,它们提供了更强大的状态监听能力。

// 使用Pinia
import { useStore } from '@/stores/counter'
import { storeToRefs } from 'pinia'

const store = useStore()
const { count } = storeToRefs(store)

watch(count, (newVal) => {
  console.log('Count changed:', newVal)
})

标签: vue
分享给朋友:

相关文章

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &…

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提交…

vue调用接口实现退出

vue调用接口实现退出

实现Vue退出功能的步骤 在Vue中调用接口实现退出功能通常需要与后端API交互,以下是实现方法: 前端实现 创建退出方法,调用后端API接口: methods: { logout() {…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 con…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template…