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 radio 操作代码
Mar 16 Javascript
基于JQuery的动态删除Table表格的行和列的代码
May 12 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
Jun 08 Javascript
JavaScript自学笔记(必看篇)
Jun 23 Javascript
JavaScript基础知识点归纳(推荐)
Jul 09 Javascript
AngularJS ng-app 指令实例详解
Jul 30 Javascript
canvas实现动态小球重叠效果
Feb 06 Javascript
基于Vue2.0的分页组件
Mar 16 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
Jul 19 Javascript
React Native中Navigator的使用方法示例
Oct 13 Javascript
vue用BMap百度地图实现即时搜索功能
Sep 26 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
Sep 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
PHP MVC框架路由学习笔记
2016/03/02 PHP
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
2013/04/15 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
python实现文件名批量替换和内容替换
2014/03/20 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
音乐学个人的自荐书范文
2013/11/26 职场文书
技术合作协议书范本
2014/04/18 职场文书
作风建设演讲稿
2014/05/23 职场文书
中队活动总结
2014/08/27 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
小数乘法教学反思
2016/02/22 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL