当前位置:首页 > VUE

vue实现监听

2026-01-13 01:03:16VUE

监听数据变化

在Vue中,可以使用watch选项或$watch方法来监听数据的变化。watch适用于监听单个数据属性,而$watch适用于动态监听或组件销毁时自动取消监听。

// 使用watch选项
export default {
  data() {
    return {
      message: 'Hello'
    }
  },
  watch: {
    message(newVal, oldVal) {
      console.log(`Message changed from ${oldVal} to ${newVal}`)
    }
  }
}
// 使用$watch方法
export default {
  data() {
    return {
      message: 'Hello'
    }
  },
  created() {
    this.$watch('message', (newVal, oldVal) => {
      console.log(`Message changed from ${oldVal} to ${newVal}`)
    })
  }
}

深度监听对象

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

export default {
  data() {
    return {
      user: {
        name: 'John',
        age: 30
      }
    }
  },
  watch: {
    user: {
      handler(newVal, oldVal) {
        console.log('User changed')
      },
      deep: true
    }
  }
}

立即触发监听

有时需要在组件创建时立即执行监听函数,可以使用immediate选项。

export default {
  data() {
    return {
      count: 0
    }
  },
  watch: {
    count: {
      handler(newVal, oldVal) {
        console.log(`Count is ${newVal}`)
      },
      immediate: true
    }
  }
}

监听计算属性

计算属性本身是响应式的,可以直接在watch中监听。

export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName() {
      return `${this.firstName} ${this.lastName}`
    }
  },
  watch: {
    fullName(newVal, oldVal) {
      console.log(`Full name changed to ${newVal}`)
    }
  }
}

监听路由变化

在Vue Router中,可以使用watch监听$route对象的变化。

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

监听多个数据源

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

export default {
  data() {
    return {
      x: 0,
      y: 0
    }
  },
  watch: {
    ['x', 'y']([newX, newY], [oldX, oldY]) {
      console.log(`Position changed from (${oldX}, ${oldY}) to (${newX}, ${newY})`)
    }
  }
}

使用侦听器清理

在组件销毁时,手动创建的侦听器需要清理。使用$watch返回的函数可以取消侦听。

export default {
  data() {
    return {
      timer: null
    }
  },
  created() {
    const unwatch = this.$watch('timer', (newVal) => {
      console.log(`Timer updated: ${newVal}`)
    })
    // 在组件销毁时取消侦听
    this.$once('hook:beforeDestroy', unwatch)
  }
}

性能优化

对于频繁变化的数据,可以使用debouncethrottle来优化性能。

vue实现监听

import { debounce } from 'lodash'

export default {
  data() {
    return {
      searchQuery: ''
    }
  },
  watch: {
    searchQuery: debounce(function(newVal) {
      console.log(`Searching for: ${newVal}`)
    }, 500)
  }
}

标签: vue
分享给朋友:

相关文章

vue表格重置怎么实现

vue表格重置怎么实现

重置表格数据的方法 在Vue中重置表格数据通常需要操作绑定的数据源,以下是几种常见实现方式: 直接重置数据源 // 假设表格绑定的是tableData this.tableData = [...t…

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置 使…

vue实现ai

vue实现ai

Vue 实现 AI 功能 Vue.js 可以通过集成第三方 AI 服务或本地 AI 模型来实现 AI 功能。以下是几种常见的方法: 集成第三方 AI API 使用 Vue 调用如 OpenAI、Go…

vue实现过程

vue实现过程

Vue 的实现过程 Vue 的实现过程可以分为多个核心模块,包括响应式系统、虚拟 DOM、模板编译等。以下是 Vue 的主要实现过程分析。 响应式系统 Vue 的响应式系统基于 Object.def…

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…