Vue.JS入门教程之事件监听


Posted in Javascript onDecember 01, 2016

你可以使用 v-on 指令来绑定并监听 DOM 事件。绑定的内容可以是一个当前实例上的方法 (后面无需跟括号) 或一个内联表达式。如果提供的是一个方法,则原生的 DOM event 会被作为第一个参数传入,同时这个 event 会带有 targetVM 属性,指向触发该事件的相应的 ViewModel:

<div id="demo">
 <a v-on="click: onClick">触发一个方法函数</a>
 <a v-on="click: n++">触发一个表达式</a>
</div>
new Vue({
 el: '#demo',
 data: {
  n: 0
 },
 methods: {
  onClick: function (e) {
  console.log(e.targetVM.n);
  console.log(e.target.tagName);// "A"
  console.log(e.targetVM === this);// true
  }
 }
 });

执行表达式

当在 v-repeat 里使用 v-on 时,targetVM 显得很有用,因为 v-repeat 会创建大量子 ViewModel。但是,通过执行表达式的方式,把代表当前 ViewModel 数据对象的别名传进去,会更方便直观一些:

<ul id="list">
 <li v-repeat="item in items" v-on="click: toggle(item)">
 {{item.text}}
 </li>
 <button v-on="click: submit('hello!', $event)">Submit</button>
</ul>
new Vue({
 el: '#list',
 data: {
  items: [
  { text: 'one', done: true },
  { text: 'two', done: false }
  ]
 },
 methods: {
  toggle: function (item) {
  console.info(item.done);
  item.done = !item.done;
  console.info(item.done);
  },
  submit: function (msg, e) {
  e.stopPropagation();
  console.info(msg + ' submit is called!');
  }
 }
 })

当你想要在表达式中访问原来的 DOM event,你可以传递一个 $event 参数进去。

key过滤器
当监听键盘事件时,我们常常需要判断常用的 key code。Vue.js 提供了一个特殊的只能用在 v-on 指令的过滤器:key。它接收一个表示 key code 的参数并完成判断:

<!-- 只有当 keyCode 等于 13 时才调用方法 -->
 <input v-on="keyup:mySubmit | key 13">

系统有很多预设值可以使用,例如:

<!-- 效果同上 -->
<input v-on="keyup:submit | key 'enter'">

预设值为:enter tab delete esc up down left right space

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

它便于在 HTML 模板中轻松定位 JS 代码里的对应方法实现。
因为你无须在 JS 里手动绑定事件,你的 ViewModel 代码可以是非常纯粹的逻辑,和 DOM 完全解耦。这会更易于测试。
当一个 ViewModel 被销毁时,所有的事件监听都会被自动移除。你无须担心如何自行清理它们。

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

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

Javascript 相关文章推荐
javascript 显示当前系统时间代码
Dec 28 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
Dec 12 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
Canvas 绘制粒子动画背景
Feb 15 Javascript
ES6生成器用法实例分析
Apr 10 Javascript
JavaScript判断输入是否为数字类型的方法总结
Sep 28 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
Dec 04 Javascript
React Native之prop-types进行属性确认详解
Dec 19 Javascript
微信小程序button组件使用详解
Jan 31 Javascript
详解Vue2.0组件的继承与扩展
Nov 23 Javascript
js中实例与对象的区别讲解
Jan 21 Javascript
Vue组件化开发之通用型弹出框的实现
Feb 28 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
Dec 01 #Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
Dec 01 #Javascript
jsTree使用记录实例
Dec 01 #Javascript
Vue.JS入门教程之列表渲染
Dec 01 #Javascript
Vue.JS入门教程之处理表单
Dec 01 #Javascript
利用js获取下拉框中所选的值
Dec 01 #Javascript
js微信扫描二维码登录网站技术原理
Dec 01 #Javascript
You might like
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
Javascript 错误处理的几种方法
2009/06/13 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python求斐波那契数列示例分享
2014/02/14 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
个人自我鉴定怎么写
2013/10/28 职场文书
工厂保洁员岗位职责
2013/12/04 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
多媒体教室标语
2014/06/26 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
六年级小学生评语
2014/12/26 职场文书
大学生团员个人总结
2015/02/14 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书