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嵌套函数调用上下文的问题解决
Mar 26 Javascript
jquery中map函数与each函数的区别实例介绍
Jun 23 Javascript
jquery text()方法取标签中的文本
Jul 25 Javascript
extjs 如何给column 加上提示
Jul 29 Javascript
JavaScript数据结构之链表的实现
Mar 19 Javascript
jquery仿微信聊天界面
May 06 jQuery
基于js中this和event 的区别(详解)
Oct 24 Javascript
javascript按钮禁用和启用的效果实例代码
Oct 29 Javascript
微信小程序聊天功能的示例代码
Jan 13 Javascript
原生javascript制作的拼图游戏实现方法详解
Feb 23 Javascript
JavaScript实现简易计算器小功能
Oct 22 Javascript
JS新手入门数组处理的实用方法汇总
Apr 07 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脚本[带参数]的方法
2010/01/22 PHP
php include加载文件两种方式效率比较
2010/08/08 PHP
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
突发奇想的一个jquery插件
2010/11/19 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
写给老师的表扬信
2014/01/21 职场文书
应聘会计求职信
2014/06/11 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
法院授权委托书格式
2014/09/28 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
海上钢琴师观后感
2015/06/03 职场文书
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
部分武汉产收音机展览
2022/04/07 无线电
Python 图片添加美颜效果
2022/04/28 Python