https://jsrun.pro/ZLfKp/edit
### 监听事件
可以用v-on指令监听DOM事件, 并在触发时运行一些JavaScript代码。
```
<div id="example-1">
<button v-on:click="counter += 1">Add 1</button>
<p>The button above has been clicked {{ counter }} times.</p>
</div>
```
### 事件处理方法
除了把JS代码写在指令中,v-on还可以接收调用的方法名。
### 内联处理器中的方法
除了绑定方法名, 还可以内嵌JS调用方法
```
<div id="example-3">
<button v-on:click="say('hi')">Say hi</button>
<button v-on:click="say('what')">Say what</button>
</div>
```
使用$event 特殊变量,可以在内联语句处理器中访问原始的DOM事件。
```
<button v-on:click="warn('Form cannot be submitted yet.', $event)">
Submit
</button>
```
```
// ...
methods: {
warn: function (message, event) {
// 现在我们可以访问原生事件对象
if (event) {
event.preventDefault()
}
alert(message)
}
}
```
### 事件修饰符
在时间处理程序调用, `event.preventDefault()`或`event.stopPropagation()` 是非常常见的需求, 但是更好的方式是: 方法只有纯粹的数据逻辑, 而不是去处理DOM事件细节。
为此, Vue为v-on提供了事件修饰符,由点开头的指令前缀来表示。包括:
* .stop
* .prevent
* .capture
* .self
* .once
* .passive
```
<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>
```
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
#### .once
2.1.4新增, 触发一次, .once 修饰符还能被用到自定义的组件事件上。
```
<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a>
```
#### 2.3.0 新增
Vue 还对应 addEventListener 中的 passive 选项提供了 .passive 修饰符。
```
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成 -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div v-on:scroll.passive="onScroll">...</div>
```
这个 .passive 修饰符尤其能够提升移动端的性能,不要把`.passive`和`.prevent`一起使用,因为`.prevent`将会被忽略,同时浏览器可能会向你展示一个警告。请记住,`.passive`会告诉浏览器你*不*想阻止事件的默认行为。
### 按键修饰符
Vue 允许为`v-on`在监听键盘事件时添加按键修饰符
```
<!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` -->
<input v-on:keyup.enter="submit">
```
你可以直接将 KeyboardEvent.key 暴露的任意有效按键名转换为 kebab-case 来作为修饰符。
```
<input v-on:keyup.page-down="onPageDown">
```
在上述示例中,处理函数只会在 $event.key 等于 PageDown 时被调用。
#### 按键码
keyCode 的事件用法已经被废弃了并可能不会被最新的浏览器支持。
```
<input v-on:keyup.13="submit">
```
按键的别名:
* .enter
* .tab
* . delete (包含删除和退格)
* .esc
* .space
* .up
* .down
* .left
* .right
### 系统修饰键
2.1.0 新增
可以用如下修饰符来实现仅在按下相应按键时才触发鼠标或键盘事件的监听器
* `.ctrl`
* `.alt`
* `.shift`
* `.meta`
```
<!-- Alt + C -->
<input @keyup.alt.67="clear">
<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>
```
警告: 请注意修饰键与常规按键不同,在和`keyup`事件一起用时,事件触发时修饰键必须处于按下状态。换句话说,只有在按住`ctrl`的情况下释放其它按键,才能触发`keyup.ctrl`。而单单释放`ctrl`也不会触发事件。如果你想要这样的行为,请为`ctrl`换用`keyCode`:`keyup.17`。
#### .exact修饰符
2.5.0 新增
`.exact`修饰符允许你控制由精确的系统修饰符组合触发的事件。
```
<!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
<button @click.ctrl="onClick">A</button>
<!-- 有且只有 Ctrl 被按下的时候才触发 -->
<button @click.ctrl.exact="onCtrlClick">A</button>
<!-- 没有任何系统修饰符被按下的时候才触发 -->
<button @click.exact="onClick">A</button>
```
### 鼠标按钮修饰符
提示: 2.2.0 新增
* `.left`
* `.right`
* `.middle`
- 引入篇
- 基础篇
- 快速入手
- 名词解释
- Vue语法
- Vue安装
- Vue实例
- 模板语法
- 计算属性和侦听器
- Class与Style绑定
- 条件渲染
- 列表渲染
- 事件处理
- 表单输入绑定
- 组件基础
- 进阶篇
- 常用模块
- 单文件组件
- 快速学会Vue Router路由
- Vue Route 进阶使用
- Vuex 与状态管理
- Axios
- Mock.js
- data数据显示在页面
- Vue生命周期
- Vue按需加载组件
- 国际化
- 页面加载进度条 -NProgress
- 自定义主题颜色
- 开发篇
- Vue入门——创建并运行一个Vue项目
- Vue + Element UI 项目创建
- 使用Vue ui项目创建工具在网页中创建Vue项目
- Vue项目创建入门实例
- Vue CLI
- 创建项目
- 使用Visual Studio Code 开发Vue项目
- 高级篇
- 组件深入
- Vue+Element
- Vue + ElementUI 主题颜色切换
- 工具篇
- 在线代码编辑器
- 开发工具(IDE,集成开发环境)
- npm(JavaScript包管理工具)介绍
- Node.js(npm)在Windows下安装
- webpack介绍
- webpack快速实例
- webpack
- 快速入门实例
- 安装
- 概念
- Nodejs
- 基础
- npm
- 命令参考
- 命令
- 模块安装
- Babel
- 问题解决篇
- ERROR Failed to get response from https://registry.yarnpkg.com/vue-cli-version -marker
- Vue常见问题
- You are using the runtime-only build of Vue where the template compiler is not
- yarn 报unable to get local issuer certificate
- yarn There appears to be trouble with your network connection. Retrying
- Expected Boolean, got String with value "true".
- 项目篇
- 项目创建
- 项目设计
- 页面
- 开发问题
- 后端
- Spring Boot + Activiti 工作流框架搭建之一
- Spring Boot + Activiti 工作流框架搭建之二
- 工作流
- Java流程框架
- Activiti
- 页面风格
- green
- blue
- orange
- 参考篇
- 好的Git项目
- Vue的在线js
- 指令
- 开发说明
- JavaScript 高级
- export和import
- JS模块化规范对比以及在Node.js的实现
- Storage
- ES2015
- scss
- CSS、Sass、SCSS