Vue.js每天必学之方法与事件处理器


Posted in Javascript onSeptember 06, 2016

方法处理器

可以用 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 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何自己清理它们。

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
解决iframe的frameborder在chrome/ff/ie下的差异
Aug 12 Javascript
Jquery 选中表格一列并对表格排序实现原理
Dec 15 Javascript
jquery获取一组checkbox的值(实例代码)
Nov 04 Javascript
JS实现鼠标单击与双击事件共存
Mar 08 Javascript
JS实现1000以内被3或5整除的数字之和
Feb 18 Javascript
前端微信支付js代码
Jul 25 Javascript
教你一步步用jQyery实现轮播器
Dec 18 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
微信小程序数据分析之自定义分析的实现
Aug 17 Javascript
jquery实现拖拽小方块效果
Dec 10 jQuery
使用PDF.js渲染canvas实现预览pdf的效果示例
Apr 17 Javascript
基于JavaScript实现购物网站商品放大镜效果
Sep 06 #Javascript
AngularGauge 属性解析详解
Sep 06 #Javascript
AngularJS 面试题集锦
Sep 06 #Javascript
BootStrap glyphicon图标无法显示的解决方法
Sep 06 #Javascript
JS原型链 详解及示例代码
Sep 06 #Javascript
JavaScript中push(),join() 函数 实例详解
Sep 06 #Javascript
jquery实现全选、不选、反选的两种方法
Sep 06 #Javascript
You might like
B2K与车机的中波PK
2021/03/02 无线电
php递归列出所有文件和目录的代码
2008/09/10 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
php发送post请求函数分享
2014/03/06 PHP
php返回json数据函数实例
2014/10/09 PHP
php图片添加水印例子
2016/07/20 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
一些常用的JS功能函数代码
2009/06/23 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
使用js实现数据格式化
2014/12/03 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
python基础之文件处理知识总结
2021/05/23 Python
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL