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 相关文章推荐
一个js拖拽的效果类和dom-drag.js浅析
Jul 17 Javascript
javascript实现图片切换的幻灯片效果源代码
Dec 12 Javascript
通过Javascript读取本地Excel文件内容的代码示例
Apr 08 Javascript
javascript自定义的addClass()方法
May 28 Javascript
JavaScript代码复用模式详解
Nov 07 Javascript
Bootstrap 组件之按钮(二)
May 11 Javascript
Angular2从搭建环境到开发步骤详解
Oct 17 Javascript
JavaScript数组去重的6个方法
Jan 21 Javascript
AngularJS 的$timeout服务示例代码
Sep 21 Javascript
对angular 实时更新模板视图的方法$apply详解
Oct 09 Javascript
详解vue-router导航守卫
Jan 19 Javascript
JavaScript数组类型Array相关的属性与方法详解
Sep 08 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 随机生成10位字符代码
2009/03/26 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
JavaScript 事件参考手册
2008/12/24 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
python模拟Django框架实例
2016/05/17 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
瑞典度假品牌:OAS
2019/05/28 全球购物
项目计划书范文
2014/01/09 职场文书
英文演讲稿
2014/05/15 职场文书
实习推荐信格式模板
2015/03/27 职场文书
2015年社区工作总结
2015/04/08 职场文书
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS