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实现浏览器菜单命令
Sep 05 Javascript
jquery调用wcf并展示出数据的方法
Jul 07 Javascript
JS的replace方法详细介绍
Nov 09 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 Javascript
基于Jquery实现键盘按键监听
May 11 Javascript
js获取form的方法
May 06 Javascript
js实现开启密码大写提示
Dec 21 Javascript
ES6入门教程之Class和Module详解
May 17 Javascript
vue-music关于Player播放器组件详解
Nov 28 Javascript
Vue插件从封装到发布的完整步骤记录
Feb 28 Javascript
vue+iview动态渲染表格详解
Mar 19 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
Feb 14 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/10/09 PHP
PHP 开发环境配置(Zend Studio)
2010/04/28 PHP
四种php中webservice实现的简单架构方法及实例
2015/02/03 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
Vue3为什么这么快
2020/09/23 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
Cpy和Python的效率对比
2015/03/20 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
python中base64加密解密方法实例分析
2015/05/16 Python
Python类的继承和多态代码详解
2017/12/27 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
简单了解Python3里的一些新特性
2019/07/13 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
HTML5 解析规则分析
2009/08/14 HTML / CSS
营销主管自我评价怎么写
2013/09/19 职场文书
求职自我评价怎么写
2015/03/09 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
Js类的构建与继承案例详解
2021/09/15 Javascript
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫