当前位置:首页 > VUE

vue里怎么实现监听

2026-01-22 20:49:11VUE

监听数据变化

在Vue中可以通过watch选项或$watch方法监听数据变化。watch允许观察某个数据属性,当其发生变化时执行指定的回调函数。

export default {
  data() {
    return {
      message: 'Hello'
    }
  },
  watch: {
    message(newVal, oldVal) {
      console.log(`消息从 ${oldVal} 变为 ${newVal}`)
    }
  }
}

计算属性监听

使用计算属性可以监听依赖数据的变化并返回计算结果。计算属性具有缓存机制,只有当依赖数据变化时才会重新计算。

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

监听DOM事件

通过v-on指令或@简写可以监听DOM事件并执行相应的方法。

<template>
  <button @click="handleClick">点击我</button>
</template>

<script>
export default {
  methods: {
    handleClick() {
      console.log('按钮被点击')
    }
  }
}
</script>

监听子组件事件

使用$emit触发自定义事件,父组件通过v-on监听子组件事件。

vue里怎么实现监听

<!-- 子组件 -->
<button @click="$emit('custom-event', '数据')">触发事件</button>

<!-- 父组件 -->
<child-component @custom-event="handleCustomEvent"></child-component>

深度监听对象

对于对象或数组,需要设置deep: true选项才能监听到内部属性的变化。

export default {
  data() {
    return {
      user: {
        name: '张三',
        age: 20
      }
    }
  },
  watch: {
    user: {
      handler(newVal) {
        console.log('用户信息变化', newVal)
      },
      deep: true
    }
  }
}

立即触发监听

设置immediate: true可以让监听器在创建时立即执行一次回调函数。

vue里怎么实现监听

watch: {
  value: {
    handler(newVal) {
      console.log('初始值:', newVal)
    },
    immediate: true
  }
}

监听路由变化

通过watch监听$route对象可以响应路由变化。

watch: {
  '$route'(to, from) {
    console.log(`从 ${from.path} 跳转到 ${to.path}`)
  }
}

生命周期钩子监听

在生命周期钩子中监听特定事件或执行操作。

export default {
  created() {
    window.addEventListener('resize', this.handleResize)
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.handleResize)
  },
  methods: {
    handleResize() {
      console.log('窗口大小改变')
    }
  }
}

使用第三方库监听

对于复杂场景,可以使用如Vuex的状态管理库或EventBus进行跨组件监听。

// EventBus示例
const bus = new Vue()

// 发送事件
bus.$emit('event-name', data)

// 接收事件
bus.$on('event-name', data => {
  console.log('收到事件', data)
})

标签: vue
分享给朋友:

相关文章

vue实现新闻

vue实现新闻

Vue 实现新闻功能 使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。 新闻列表展示 通过 Vue 组件展示新闻列表,通常使用 v-for…

vue实现文字

vue实现文字

Vue 中实现文字显示的方法 在 Vue 中实现文字显示可以通过多种方式,包括插值表达式、指令、组件等。以下是几种常见的实现方法: 插值表达式 使用双大括号 {{ }} 进行文本插值,这是 Vue…

tabbar 实现 vue

tabbar 实现 vue

在 Vue 中实现 TabBar 功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue Router 结合自定义组件 创建一个自定义的 TabBar 组件,结合 Vue Router 实现…

vue实现vmodel

vue实现vmodel

Vue 实现 v-model Vue 的 v-model 是一个语法糖,用于在表单元素或组件上实现双向数据绑定。以下是其实现方式和原理的详细说明。 在表单元素上使用 v-model v-model…

vue实现音乐

vue实现音乐

Vue实现音乐播放功能 使用Vue实现音乐播放功能可以通过多种方式完成,以下是几种常见的实现方法: 使用HTML5 Audio API 在Vue组件中直接使用HTML5的Audio对象来控制音乐播放…

vue router实现分页

vue router实现分页

Vue Router 实现分页的方法 在 Vue.js 中,可以通过 Vue Router 实现分页功能,通常需要结合路由参数和动态路由匹配。以下是几种常见的实现方式: 使用查询参数实现分页 在路由…