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 相关文章推荐
Javascript 验证上传图片大小[客户端]
Aug 01 Javascript
Checbox的操作含已选、未选及判断代码
Nov 07 Javascript
jQuery中:lt选择器用法实例
Dec 29 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
Oct 10 Javascript
微信小程序实现实时圆形进度条的方法示例
Feb 24 Javascript
JS实现的二叉树算法完整实例
Apr 06 Javascript
vue路由跳转时判断用户是否登录功能的实现
Oct 26 Javascript
Vue.js中对css的操作(修改)具体方式详解
Oct 30 Javascript
laypage+SpringMVC实现后端分页
Jul 27 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
Sep 11 Javascript
vue 实现LED数字时钟效果(开箱即用)
Dec 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垃圾回收机制对内存泄露的处理
2013/06/14 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
基于python实现地址和经纬度转换
2020/05/19 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
空字符串(“”)和null的区别
2012/11/13 面试题
自主招生自荐信范文
2013/12/04 职场文书
单位未婚证明范本
2014/01/18 职场文书
校友回访母校寄语
2015/02/26 职场文书
毕业论文致谢词
2015/05/14 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
思想工作总结范文
2015/08/12 职场文书
2016中秋节广告语
2016/01/28 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
javascript的setTimeout()使用方法总结
2021/11/20 Javascript