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 相关文章推荐
Javascript this 的一些学习总结
Aug 31 Javascript
[JSF]使用DataModel处理表行事件的实例代码
Aug 05 Javascript
seajs中模块的解析规则详解和模块使用总结
Mar 12 Javascript
jQuery unbind()方法实例详解
Jan 19 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
Apr 05 Javascript
JQuery控制图片由中心点逐渐放大效果
Jun 26 Javascript
修改jquery中dialog的title属性方法(推荐)
Aug 26 Javascript
AngularJS 异步解决实现方法
Jun 12 Javascript
AngularJS实现表格的增删改查(仅限前端)
Jul 04 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
Feb 13 Javascript
JS实现随机点名器
Apr 12 Javascript
vuex分模块后,实现获取state的值
Jul 26 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
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
Php图像处理类代码分享
2012/01/19 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
浅谈Python type的使用
2019/11/19 Python
python实现PCA降维的示例详解
2020/02/24 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
《骆驼和羊》教学反思
2014/02/27 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
Python OpenCV形态学运算示例详解
2022/04/07 Python