详解Vue 方法与事件处理器


Posted in Javascript onJune 20, 2017

方法与事件处理器

方法处理器

可以用 v-on 指令监听 DOM 事件:

<div id="example">
 <button v-on:click="greet">Greet</button>
</div>

我们绑定了一个单击事件处理器到一个方法 greet。下面在 Vue 实例中定义这个方法:

var vm = new Vue({
 el: '#example',
 data: {
  name: 'Vue.js'
 },
 // 在 `methods` 对象中定义方法
 methods: {
  greet: function (event) {
   // 方法内 `this` 指向 vm
   alert('Hello ' + this.name + '!')
   // `event` 是原生 DOM 事件
   alert(event.target.tagName)
  }
 }
})

// 也可以在 JavaScript 代码中调用方法
vm.greet() // -> 'Hello Vue.js!'

内联语句处理器

除了直接绑定到一个方法,也可以用内联 JavaScript 语句:

<div id="example-2">
 <button v-on:click="say('hi')">Say Hi</button>
 <button v-on:click="say('what')">Say What</button>
</div>

new Vue({
 el: '#example-2',
 methods: {
  say: function (msg) {
   alert(msg)
  }
 }
})

类似于内联表达式,事件处理器限制为一个语句。

有时也需要在内联语句处理器中访问原生 DOM 事件。可以用特殊变量 $event 把它传入方法:

<button v-on:click="say('hello!', $event)">Submit</button>
// ...
methods: {
 say: function (msg, event) {
  // 现在我们可以访问原生事件对象
  event.preventDefault()
 }
}

事件修饰符

在事件处理器中经常需要调用 event.preventDefault() 或 event.stopPropagation()。尽管我们在方法内可以轻松做到,不过让方法是纯粹的数据逻辑而不处理 DOM 事件细节会更好。

为了解决这个问题,Vue.js 为 v-on 提供两个 事件修饰符:.prevent 与 .stop。你是否还记得修饰符是点号打头的指令后缀?

<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat">

<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>

1.0.16 添加了两个额外的修饰符:

<!-- 添加事件侦听器时使用 capture 模式 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 -->
<div v-on:click.self="doThat">...</div>

按键修饰符

在监听键盘事件时,我们经常需要检测 keyCode。Vue.js 允许为 v-on 添加按键修饰符:

<!-- 只有在 keyCode 是 13 时调用 vm.submit() -->
<input v-on:keyup.13="submit">

记住所有的 keyCode 比较困难,Vue.js 为最常用的按键提供别名:

<!-- 同上 -->
<input v-on:keyup.enter="submit">

<!-- 缩写语法 -->
<input @keyup.enter="submit">

全部的按键别名: 

enter
tab
delete
esc
space
up
down
left
right

1.0.8+: 支持单字母按键别名。

1.0.17+: 可以自定义按键别名:

// 可以使用 @keyup.f1
Vue.directive('on').keyCodes.f1 = 112

为什么在 HTML 中监听事件?

你可能注意到这种事件监听的方式违背了传统理念 “separation of concern”。不必担心,因为所有的 Vue.js 事件处理方法和表达式都严格绑定在当前视图的 ViewModel 上,它不会导致任何维护困难。实际上,使用 v-on 有几个好处:

1.扫一眼 HTML 模板便能轻松定位在 JavaScript 代码里对应的方法。

2.因为你无须在 JavaScript 里手动绑定事件,你的 ViewModel 代码可以是非常纯粹的逻辑,和 DOM 完全解耦,更易于测试。

3.当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何自己清理它们。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js里的prototype使用示例
Nov 19 Javascript
js判断FCKeditor内容是否为空的两种形式
May 14 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
Aug 08 Javascript
JavaScript动态提示输入框输入字数的方法
Jul 27 Javascript
jquery实现表单输入时提示文字滑动向上效果
Aug 10 Javascript
javascript如何实现360度全景照片问题汇总
Apr 04 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
Sep 06 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
详解微信小程序 页面跳转 传递参数
Dec 08 Javascript
JS常见算法详解
Feb 28 Javascript
node结合swig渲染摸板的方法
Apr 11 Javascript
Vue.js中对css的操作(修改)具体方式详解
Oct 30 Javascript
Vue Ajax跨域请求实例详解
Jun 20 #Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
Jun 20 #Javascript
详解Angular的8个主要构造块
Jun 20 #Javascript
vue之数据交互实例代码
Jun 20 #Javascript
jquery加载单文件vue组件的方法
Jun 20 #jQuery
Angular.JS中select下拉框设置value的方法
Jun 20 #Javascript
原生js二级联动效果
Jun 20 #Javascript
You might like
php防攻击代码升级版
2010/12/29 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
php实现两个数组相加的方法
2015/02/17 PHP
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
python进阶教程之模块(module)介绍
2014/08/30 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
python音频处理的示例详解
2020/12/23 Python
Python读写Excel表格的方法
2021/03/02 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
古驰英国官网:GUCCI英国
2020/03/07 全球购物
母婴店促销方案
2014/03/05 职场文书
2014年工会工作总结
2014/11/12 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
小学语文教学反思范文
2016/03/03 职场文书
优秀员工演讲稿
2019/06/21 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
python 批量压缩图片的脚本
2021/06/02 Python