菜单
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Vue 教程

Vue 首页 Vue Intro Vue Directives Vue v-bind Vue v-if Vue v-show Vue v-for Vue Events Vue v-on Vue Methods Vue Event Modifiers Vue Forms Vue v-model Vue CSS Binding Vue Computed Properties Vue Watchers Vue Templates

Scaling Up

Vue 为什么、如何及设置 Vue 第一个 SFC 页面 Vue 组件 Vue Props Vue v-for 组件 Vue $emit() Vue 透传属性 Vue 作用域样式 Vue 局部组件 Vue 插槽 Vue v-slot Vue 作用域插槽 Vue 动态组件 Vue Teleport Vue HTTP 请求 Vue 模板引用 Vue 生命周期钩子 Vue Provide/Inject Vue 路由 Vue 表单输入 Vue 动画 Vue v-for 动画 Vue 构建 Vue Composition API

Vue Reference

Vue Built-in Attributes Vue Built-in Components Vue Built-in Elements Vue Component Instance Vue Directives Vue Instance Options Vue Lifecycle Hooks

Vue 示例

Vue Examples Vue Exercises Vue Quiz Vue Server Vue Certificate

Vue 侦听器

侦听器是一种方法,它会侦听同名的数据属性。

每当数据属性值发生变化时,侦听器就会运行。

如果某个数据属性值需要采取行动,请使用侦听器

侦听器概念

侦听器是我们将要学习的 Vue 实例中的第四个配置选项。我们已经看过的三个配置选项是 'data'、'methods' 和 'computed'。

与 'data'、'methods' 和 'computed' 一样,侦听器在 Vue 实例中也有一个保留名称:'watch'。

语法

const app = Vue.createApp({
  data() {
    ...
  },
  手表: {
    ...
  },
  computed: {
    ...
  },
  methods: {
    ...
  }
})

如顶部绿色区域所述,侦听器监控同名的数据属性。

我们从不调用侦听器方法。它只在属性值改变时自动调用。

新的属性值始终作为输入参数提供给侦听器方法,旧值也是如此。

示例

一个 <input type="range"> 元素用于改变值 'rangeVal'。一个侦听器用于阻止用户选择被认为是无效的 20 到 60 之间的值。

<input type="range" v-model="rangeVal">
<p>{{ rangeVal }}</p>
const app = Vue.createApp({
  data() {
    rangeVal: 70
  },
  watch: {
    rangeVal(val){
      if( val>20 && val<60) {
        if(val<40){
          this.rangeVal = 20;
        }
        else {
          this.rangeVal = 60;
        }
      }
    }
  }
})
自己动手试一试 »

带有新旧值的侦听器

除了新的属性值,前一个属性值也会自动作为输入参数提供给侦听器方法。

示例

我们设置了一个 <div> 元素的点击事件,用方法 'updatePos' 记录鼠标指针的 x 坐标 'xPos'。侦听器利用侦听器方法的新旧输入参数计算新 x 坐标和前一个 x 坐标之间的像素差。

<div v-on:click="updatePos"></div>
<p>{{ xDiff }}</p>
const app = Vue.createApp({
  data() {
    xPos: 0,
    xDiff: 0
  },
  watch: {
    xPos(newVal,oldVal){
      this.xDiff = newVal-oldVal
    }
  },
  methods: {
    updatePos(evt) {
      this.xPos = evt.offsetX
    }
  }
})
自己动手试一试 »

我们还可以使用新旧值,在输入从无效变为有效的那一刻向用户提供反馈。

示例

一个 <input> 元素的值连接到一个侦听器。如果该值包含 '@' 符号,则被认为是有效的电子邮件地址。用户会收到一个反馈文本,告知输入是否有效、无效,或者是否在上次按键后刚刚变为有效。

<input v-type="email" v-model="inpAddress">
<p v-bind:class="myClass">{{ feedbackText }}</p>
const app = Vue.createApp({
  data() {
    inpAddress: '',
    feedbackText: '',
    myClass: 'invalid'
  },
  watch: {
    inpAddress(newVal,oldVal) {
      if( !newVal.includes('@') ) {
        this.feedbackText = '电子邮件地址无效';
        this.myClass = 'invalid';
      }
      else if( !oldVal.includes('@') && newVal.includes('@') ) {
        this.feedbackText = '太棒了!你把它修正了!';
        this.myClass = 'valid';
      }
      else {
        this.feedbackText = '电子邮件地址有效 :)';
      }
    }
  }
})
自己动手试一试 »

侦听器 vs. 方法

侦听器和方法都写成函数,但它们之间存在许多差异

  • 方法从 HTML 中调用。
  • 方法通常在事件发生时调用。
  • 方法自动接收事件对象作为输入。
  • 我们还可以选择将其他值作为输入发送给方法
  • 侦听器只在被侦听的数据属性值改变时自动调用。
  • 侦听器自动接收被侦听属性的新旧值。
  • 我们不能选择将任何其他值作为输入发送给侦听器

侦听器 vs. 计算属性

侦听器和计算属性都写成函数。

当依赖项改变时,侦听器和计算属性都会自动调用,并且从不从 HTML 调用。

以下是计算属性和侦听器之间的一些区别

  • 侦听器只依赖于一个属性,即它们被设置为侦听的属性。
  • 计算属性可以依赖于许多属性。
  • 计算属性像数据属性一样使用,只是它们是动态的。
  • 侦听器不会从 HTML 中引用。

Vue 练习

通过练习来测试自己

练习

本练习中的侦听器应该在每次 'rangeVal' 数据属性改变时将 'count' 数据属性增加一。

这个侦听器必须叫什么名字?

<script>
  const app = Vue.createApp({
    data() {
      return {
      	rangeVal: 70,
        count: 0
      }
    },
    watch: {
      () {
        this.count++
      }
    }
  })
 app.mount('#app')
</script>

开始练习



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持