当前位置:首页 > VUE

vue对象监听如何实现

2026-01-21 09:34:39VUE

Vue 对象监听实现方法

Vue 提供了多种方式监听对象的变化,以下是常见的实现方法:

使用 watch 选项

在 Vue 实例中通过 watch 选项监听对象变化:

new Vue({
  data() {
    return {
      user: {
        name: 'John',
        age: 30
      }
    }
  },
  watch: {
    'user.name'(newVal, oldVal) {
      console.log(`Name changed from ${oldVal} to ${newVal}`)
    },
    user: {
      handler(newVal, oldVal) {
        console.log('User object changed', newVal)
      },
      deep: true // 深度监听
    }
  }
})

使用 $watch API

在组件内动态添加监听器:

export default {
  mounted() {
    this.$watch(
      'user.name',
      (newVal, oldVal) => {
        console.log(`Name changed from ${oldVal} to ${newVal}`)
      }
    )

    this.$watch(
      () => this.user,
      (newVal, oldVal) => {
        console.log('User object changed', newVal)
      },
      { deep: true }
    )
  }
}

使用计算属性

通过计算属性间接监听对象属性:

export default {
  data() {
    return {
      user: {
        name: 'John',
        age: 30
      }
    }
  },
  computed: {
    userName() {
      return this.user.name
    }
  },
  watch: {
    userName(newVal, oldVal) {
      console.log(`Name changed from ${oldVal} to ${newVal}`)
    }
  }
}

使用 Vue.set 或 this.$set

对于新增属性,需要使用特殊方法使其响应式:

this.$set(this.user, 'newProperty', 'value')
// 等同于
Vue.set(this.user, 'newProperty', 'value')

使用 Vue.observable

创建可观察对象(Vue 2.6+):

vue对象监听如何实现

const state = Vue.observable({
  count: 0
})

// 在组件中使用
export default {
  computed: {
    count() {
      return state.count
    }
  }
}

注意事项

  • 深度监听 (deep: true) 会遍历对象所有属性,可能影响性能
  • 数组变化需要特殊处理,推荐使用数组变更方法 (push/pop/shift/unshift/splice/sort/reverse)
  • 对象属性添加/删除需要使用 Vue.set/Vue.delete 保证响应式
  • Vue 3 中使用 reactiveref 替代 Vue 2 的响应式系统

分享给朋友:

相关文章

vue如何实现select

vue如何实现select

Vue 实现 Select 组件的方法 在 Vue 中实现 Select 组件可以通过原生 HTML <select> 元素或使用第三方 UI 库(如 Element UI、Ant Des…

vue如何实现轮播

vue如何实现轮播

使用 Vue 实现轮播 使用第三方库(推荐) Vue 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper。以下是使用 vue-awesome-swiper 的示…

vue如何实现绑定

vue如何实现绑定

数据绑定基础 Vue 通过 v-bind 指令实现动态绑定 HTML 属性或组件 prop。基本语法为 v-bind:属性名="表达式",简写为 :属性名="表达式"。例如绑定 class 或 sty…

vue如何实现webssh

vue如何实现webssh

使用Vue实现WebSSH WebSSH的实现需要结合前端Vue和后端服务,通常通过WebSocket协议与服务器进行实时通信。以下是具体实现方法: 安装必要依赖 在Vue项目中安装xterm.js…

vue如何实现拖拽

vue如何实现拖拽

实现拖拽的基本方法 在Vue中实现拖拽功能通常使用HTML5的Drag and Drop API或第三方库如vuedraggable。以下是两种方法的详细说明。 使用HTML5 Drag and D…

vue 如何实现多选

vue 如何实现多选

Vue 实现多选的几种方法 使用 v-model 绑定数组 在 Vue 中,可以通过 v-model 绑定一个数组来实现多选功能。当用户勾选多个选项时,选中的值会自动添加到数组中。 <temp…