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 相关文章推荐
jquery 表格的增行删行实现思路
Mar 21 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
Sep 23 Javascript
jQuery实现跨域iframe接口方法调用
Mar 14 Javascript
JavaScript数组前面插入元素的方法
Apr 06 Javascript
JavaScript操作Cookie方法实例分析
May 27 Javascript
超全面的JavaScript开发规范(推荐)
Jan 21 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
Feb 03 Javascript
js 数组详细操作方法及解析合集
Jun 01 Javascript
vue-router跳转时打开新页面的两种方法
Jul 29 Javascript
Vue 权限控制的两种方法(路由验证)
Aug 16 Javascript
layui实现form表单同时提交数据和文件的代码
Oct 25 Javascript
详解Vue.js 响应接口
Jul 04 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
用缓存实现静态页面的测试
2006/12/06 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
JavaScript 字符编码规则
2009/05/04 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
Python用模块pytz来转换时区
2016/08/19 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
Python urls.py的三种配置写法实例详解
2017/04/28 Python
python Opencv将图片转为字符画
2021/02/19 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
服务之星获奖感言
2014/01/21 职场文书
《尊严》教学反思
2014/02/11 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
个人培训总结
2015/03/05 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
Python基础之Socket通信原理
2021/04/22 Python
V Rising 服务器搭建图文教程
2022/06/16 Servers
详解SQL报错盲注
2022/07/23 SQL Server