事件处理

监听事件


可以用v-on指令监听DOM事件,并在触发运行一些js代码。
示例:

//v-on 可以直接执行一段代码或者一个方法

The button above has been clicked {{ counter }} times.

var example1 = new Vue({ el: '#example-1', data: { counter: 0 } })

事件处理方法


v-on可以接收一个方法:

var example2 = new Vue({ el: '#example-2', data: { name: 'Vue.js' }, // 在 `methods` 对象中定义方法 methods: { greet: function (event) { // `this` 在方法里指向当前 Vue 实例 alert('Hello ' + this.name + '!') // `event` 是原生 DOM 事件 if (event) { alert(event.target.tagName) } } } }) // 也可以用 JavaScript 直接调用方法 example2.greet() // => 'Hello Vue.js!'

内联处理器中的方法


除了直接绑定到一个方法,也可以在内联js语句中调用方法:

new Vue({ el: '#example-3', methods: { say: function (message) { alert(message) } } })

又是也需要在内联语句处理器中访问原始的DOM事件。可以用特殊变量$event把它传入方法:



//事件
methods: {
  warn: function (message, event) {
    // 现在我们可以访问原生事件对象
    if (event) {
      event.preventDefault()
    }
    alert(message)
  }
}

事件修饰符


在事件处理程序中调用event.preventDefault()event.stopPropagation() 是很常见的需求。(尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理DOM事件细节。
为了解决这个问题,Vue.js为v-on提供了事件修饰符。修饰符是由点开头的指令后缀来表示的。

  • .stop 阻止事件继续向下传递
  • .prevent 提交事件不在重载页面
  • .capture 当元素发生冒泡时,先触发带有该修饰符的元素
  • .self 跳过冒泡事件和捕获事件,只有直接作用在该元素上的事件才可以执行。
  • .once 只执行一次
  • .passive




...
...

使用修饰符时,顺序很重要,相应的代码会以同样的顺序产生。因此,用v-on:click.prevent.self会阻止所有的点击,而v-on:click.self.prevent 只会阻止对元素自身的点击。

Vue还对应addEventListener中的 passive选项提供了 .passive修饰符。




...

这个.passive修饰符尤其能够提升移动端的性能。

不要把.passive.prevent一起使用,因为.prevent将会被忽略,而且浏览器可能会有一个警告。请记住:.passive会告诉浏览器你 不想阻止事件的默认行为。

按键修饰符


在监听键盘事件时,经常需要检查详细的按键。Vue允许为v-on在监听键盘事件时添加按键的修饰符:



你可以直接将keyboardEvent.key暴露的任意有效按键名转换为kebab-case来作为修饰符。


在上述示例中、处理函数只会在$event.key等于PageDown时被调用。

按键码

keycode的事件用法并可能不会被最新的浏览器支持。
使用keycode属性也是允许的:


为了在必要的情况下支持就浏览器,Vue提供了绝大多数常用的按键码别名:

  • .enter
  • .tab
  • .delete (捕获删除退格键)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

有一些按键(.esc以及所有的方向键)在IE9中有所不同的key值,如果你想支持IE9,这些内置别名应该是首选。

你还可以通过全局config.keycodes对象自定义按键修饰符别名:

// 可以使用 `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112

系统修饰键


2.1.0新增

可以用如下修饰符来实现仅在按下相应按键时才触发鼠标或者键盘事件的监听器。

  • .ctrl
  • .alt
  • .shift
  • .meta

例如:





Do something

请注意修饰键与常规键不同,在和keyup事件一起用时,事件触发时修饰键必须处于按下状态。换句话说,只有在按住ctrl的情况下释放其他按键,才能触发keyup.ctrl。而单单释放ctrl也不会触发事件。如果你想要这样的行为,请为ctrl换用keycode:keyup.17

.exact修饰符

.exact修饰符允许你控制由精确的系统修饰符组合触发的事件。









鼠标按键修饰符
  • .left
  • .right
  • .middle
    这些修饰符会限制处理函数仅响应特定的鼠标按钮。

你可能感兴趣的:(事件处理)