方法处理器

可以用 v-on 指令监听 DOM 事件:

<div id="example">
<button v-on:click="greet">Greet</button>
</div>

我们绑定了一个单击事件处理器到一个方法 greet。下面在 Vue 实例中定义这个方法:

var vm = new Vue({
el: '#example',
data: {
name: 'Vue.js'
},
// 在 `methods` 对象中定义方法
methods: {
greet: function (event) {
// 方法内 `this` 指向 vm
alert('Hello ' + this.name + '!')
// `event` 是原生 DOM 事件
alert(event.target.tagName)
}
}
}) // 也可以在 JavaScript 代码中调用方法
vm.greet() // -> 'Hello Vue.js!'

自己测试一下

内联语句处理器

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

<div id="example-2">
<button v-on:click="say('hi')">Say Hi</button>
<button v-on:click="say('what')">Say What</button>
</div>
new Vue({
el: '#example-2',
methods: {
say: function (msg) {
alert(msg)
}
}
})

类似于内联表达式,事件处理器限制为一个语句

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

<button v-on:click="say('hello!', $event)">Submit</button>
// ...
methods: {
say: function (msg, event) {
// 现在我们可以访问原生事件对象
event.preventDefault()
}
}

事件修饰符

在事件处理器中经常需要调用 event.preventDefault() 或 event.stopPropagation()。尽管我们在方法内可以轻松做到,不过让方法是纯粹的数据逻辑而不处理 DOM 事件细节会更好。

为了解决这个问题,Vue.js 为 v-on 提供两个 事件修饰符.prevent 与 .stop。你是否还记得修饰符是点号打头的指令后缀?

<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a> <!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form> <!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"> <!-- 只有修饰符 -->
<form v-on:submit.prevent></form>

1.0.16 添加了两个额外的修饰符:

<!-- 添加事件侦听器时使用 capture 模式 -->
<div v-on:click.capture="doThis">...</div> <!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 -->
<div v-on:click.self="doThat">...</div>

按键修饰符

在监听键盘事件时,我们经常需要检测 keyCode。Vue.js 允许为 v-on 添加按键修饰符:

<!-- 只有在 keyCode 是 13 时调用 vm.submit() -->
<input v-on:keyup.13="submit">

记住所有的 keyCode 比较困难,Vue.js 为最常用的按键提供别名:

<!-- 同上 -->
<input v-on:keyup.enter="submit"> <!-- 缩写语法 -->
<input @keyup.enter="submit">

全部的按键别名:

  • enter
  • tab
  • delete
  • esc
  • space
  • up
  • down
  • left
  • right

1.0.8+: 支持单字母按键别名。

1.0.17+: 可以自定义按键别名:

// 可以使用 @keyup.f1
Vue.directive('on').keyCodes.f1 = 112

为什么在 HTML 中监听事件?

你可能注意到这种事件监听的方式违背了传统理念 “separation of concern”。不必担心,因为所有的 Vue.js 事件处理方法和表达式都严格绑定在当前视图的 ViewModel 上,它不会导致任何维护困难。实际上,使用 v-on 有几个好处:

  1. 扫一眼 HTML 模板便能轻松定位在 JavaScript 代码里对应的方法。

  2. 因为你无须在 JavaScript 里手动绑定事件,你的 ViewModel 代码可以是非常纯粹的逻辑,和 DOM 完全解耦,更易于测试。

  3. 当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何自己清理它们。

最新文章

  1. Intellij IDEA 快捷键整理(TonyCody)
  2. proc文件系统
  3. PHP设计模式(三)
  4. java中的堆、栈、常量池以及String类型的两种声明
  5. tachyon 编译
  6. 数组的join()函数操作
  7. stl map高效遍历删除的方法
  8. 05 Activity生命周期
  9. 在ArcMap中发布FeatureLayer(要素图层)
  10. View的绘制流程
  11. Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示
  12. 微信js-sdk开发获取签名和获取地理位置接口示例
  13. SpringMVC Mybatis Spring
  14. 树莓派进阶之路 (038) - P2P 文件下载机
  15. 轮播图(jQuery)
  16. SSH 等效性问题 总提示输入密码问题
  17. IntelliJ IDEA 2017 汉化包及教程
  18. screen 命令 http://man.linuxde.net/screen
  19. python 类高级语法 静态方法
  20. 蓝桥杯-正则问题(dfs,解决()的计算)

热门文章

  1. [Java] 将标准字符流写入到文件中(通过控制台写一个html程序,并保存)
  2. 如何正确地使用Python的属性和描述符
  3. 你可能不知道的 30 个 Python 语言的特点技巧
  4. http://www.cnblogs.com/chillsrc/category/49632.html
  5. 动画的特效Interpolator
  6. maven与git
  7. 1、程序启动原理和UIApplication【转】
  8. MongoDB基本操作命令
  9. docker-tomcat-nginx 反向代理和负载均衡
  10. Java高级软件工程师面试考纲(转)