v-on指令详解

v-on

1. 获取点击事件元素本身

< button type=“button” @click=“click1($event)”>按钮< /button>

methods : { click1() { …} }

console.log(e);//返回一个鼠标事件对象MouseEvent。
console.log(e.target);//通过对象的target来获取触发事件的对象。
console.log(e.clientX);//通过对象的target来获取鼠标的相对坐标值X。

<div id="app">
			<button type="button" @click="click1($event)">按钮</button>
			<p @click="click1($event)">哈哈哈哈</p>
			<p>{
    
    {
    
     count }}</p>
		</div>
		<script type="text/javascript">
			new Vue({
    
    
				el : '#app',
				data : {
    
    
					count : 1
				},
				methods: {
    
    
					


click1(e){
    
    
						this.count++;
						console.log(e);//返回一个鼠标事件对象MouseEvent
						console.log(e.target);//通过对象的target来获取触发事件的对象
						console.log(e.clientX);//通过对象的target来获取鼠标的相对坐标值X
					}
				}
			})
		</script>

(1)点击 ‘按钮’:
在这里插入图片描述
(2)点击 ‘哈哈哈哈’
在这里插入图片描述

2. v-on 修饰符

1 .self

只当触发事件的元素是当前元素本身时,才触发处理函数;即只当e.target是当前元素资深是才触发处理函数

<style type="text/css">
			.box1{
    
    
				width: 200px;
				height: 200px;
				border: 1px solid black;
			}
			.box2{
    
    
				width: 150px;
				height: 150px;
				border: 1px solid red;
			}
		</style>
<div id="app">
			<div class="box1"  v-on:click.self="click1">
				<div class="box2">
				</div>
			</div>
		</div>
		<script type="text/javascript">
			new Vue({
    
    
				el : '#app',
				data : {
    
    
				},
				methods:{
    
    
					click1(){
    
    
						alert('click1');
					}
				}
			})
		</script>

加了.self,只有点击box1的时候,才会触发事件;
不加.self,点击box2,也会触发事件。
在这里插入图片描述

2 .once

事件只触发一次

<div id="app">
			<div class="box1"  @click.once="click1">
				{
    
    {
    
     count }}
			</div>
		</div>
		<script type="text/javascript">
			new Vue({
    
    
				el : '#app',
				data : {
    
    
					count : 1
				},
				methods:{
    
    
					click1(){
    
    
						this.count++
					}
				}
			})

count的初值为1,点击之后增为2,当再次点击的时候,count的值不会再增加。

3 .capture

改变触发事件的先后顺序,优先捕获事件,优先执行被捕获事件。

<div id="app">
			<div class="box1"  @click.capture="click1">
				<div class="box2"  @click="click2">
					<div class="box3"  @click="click3">
						
					</div>
				</div>
			</div>
		</div>
		<script type="text/javascript">
			new Vue({
    
    
				el : '#app',
				data : {
    
    
				},
				methods:{
    
    
					click1(){
    
    
						alert('click1')
					},
					click2(){
    
    
						alert('click2')
					},
					click3(){
    
    
						alert('click3')
					}
				}
			})
		</script>

正常情况下,点击box3的时候,会先触发box3的点击事件,然后依次触发box2,box1的点击事件。但是,在给box1添加了.capture之后,点击box3的时候,会先触发box1的点击事件,然后再触发box3的点击事件,接着触发box2的点击事件。

4 .prevent

取消默认行为,例如取消a连接的跳转行为,取消选框的选中行为等。

<div id="app">
			<input type="checkbox" @click.prevent="handleSel"/>
			<input type="radio" name="" id="" value=""  @click.prevent="handleSel"/>
			<p>{
    
    {
    
     msg }}</p>
		</div>
		<script type="text/javascript">
			new Vue({
    
    
				el : '#app',
				data : {
    
    
					msg : 4
				},
				methods:{
    
    
					handleSel(){
    
    
						console.log('prevent')
					}
				}
			})
		</script>

当点击复选框的时候,复选框不会被选中,但是事件还是触发了。

4 .stop

阻止事件冒泡。冒泡是从子元素到父元素,捕获是从父元素到子元素。

<div id="app">
			<div class="box1" @click="click1">
				<div class="box2">
					<div class="box3" @click="click3">
						
					</div>
				</div>
			</div>
		</div>
		<script type="text/javascript">
			new Vue({
    
    
				el : '#app',
				data : {
    
    
					count : 1
				},
				methods:{
    
    
					click1(){
    
    
						alert('click1');
					},
					click3(){
    
    
						alert('click3');
					}
				}
			})
		</script>

正常情况下,当点击box2的时候,会先触发box2的点击事件,然后冒泡到父级,触发父级的点击事件。但是给box2添加了.stop之后,点击box2的时候,只会触发box2 的点击事件,不会冒泡到父级,不触发父级的点击事件。

5.按键修饰符

在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符

<div id="app">
			<input class="box1" v-model="value" @keypress.enter="keypress">
			{
    
    {
    
     value }}
		</div>
		<script type="text/javascript">
			new Vue({
    
    
				el : '#app',
				data : {
    
    
					value : 'd'
				},
				methods:{
    
    
					keypress(){
    
    
						console.log('mmm')
					}
				}
			})
		</script>

当在键盘按下回车键的时候触发事件。

为了在必要的情况下支持旧浏览器,Vue 提供了绝大多数常用的按键码的别名:

.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right

猜你喜欢

转载自blog.csdn.net/qq_45021462/article/details/109466508
今日推荐