vue——@click的事件命令以及修饰符
1、@click.stop 阻止事件冒泡//只弹出“noclick”<div id="app"> <div v-on:click="dodo"> <button v-on:click.stop="doThis">阻止单击事件继续传播</button> </div> </div> <script>var app =
1、@click.stop 阻止事件冒泡
//只弹出“noclick”
<div id="app"> <div v-on:click="dodo"> <button v-on:click.stop="doThis">阻止单击事件继续传播</button> </div> </div> <script>
var app = new Vue({
el: "#app",
data: {
name: "Vue.js"
},
methods: {
doThis: function () {
alert("noclick");
},
dodo: function () {
alert("dodo");
}
}
});
</script>
2、@click.prevent 阻止事件的默认行为 (提交事件不再重载页面)
<a href="http://www.baidu.com" @click.prevent="test1">百度一下</a> //阻止a标签跳转,仅执行函数test1
<form action="/xxx" @submit.prevent="test2"> //阻止表单提交,仅执行函数test2
<input type="submit" value="注册">
</form>
//有时右键点击会带出提示框,用.prevent 只会执行show2
<template>
<div >
<div>
<div @contextmenu.prevent="show2()">右键点击我呀</div>
</div>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
hide : true
}
},
methods:{
show2: function (ev1) {
alert(2);
}
}
}
</script>
3、@click.capture 优先触发
-
//添加事件监听器时使用事件捕获模式 即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理
//添加事件监听器时使用事件捕获模式 即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理
<div id="app" v-on:click="show">
1
<div id="app2" v-on:click.capture="show2">
2
<div id="app3" v-on:click="show3">3</div>
</div>
</div>
<script type="text/javascript">
var vm=new Vue({
el:"#app",
data:{
},
methods:{
show:function(){
console.log("这是app的方法")
},
show2:function(){
console.log("这是app2的方法")
},
show3:function(){
console.log("这是app3的方法")
}
}
})
</script>
//此处的代码因为div2有capture关键字,所以此时冒泡的顺序发生了改变
//正常情况下:
//点击div3一层一层冒泡,先div3=》div2=》div1
//加了关键字之后:
//点击div3时,先div2=》div3=》div1
4、@click.self 只有自己能触发,子元素无法触发
(1)v-on:click.prevent.self
会阻止所有的点击
(2)v-on:click.self.prevent
只会阻止对元素自身的点击
//此时点击a标签会依次弹出2,1,跳转。点击div标签会依次弹出3,2,1,跳转。这发生了事件冒泡。
<div id="box">
<div @click="alert(1)">
<a href="/#" @click="alert(2)">a标签
<div @click="alert(3)">div标签</div>
</a>
</div>
</div>
//此时点击a标签会依次弹出2,1。点击div标签会依次弹出3,1。此时各位看官已经发现,a标签不仅没有冒泡,也没有跳转,这就是官网说的会阻止所有的点击。
<div @click="alert(1)">
<a href="/#" @click.prevent.self="alert(2)">a标签
<div @click="alert(3)">div标签</div>
</a>
</div>
//点击div标签会依次弹出3,1,跳转。此时a标签没有响应弹框,但是发生了跳转,这就是官网说的只会阻止对元素自身的点击。
<div @click="alert(1)">
<a href="/#" @click.self.prevent="alert(2)">a标签
<div @click="alert(3)">div标签</div>
</a>
</div>
5、@click.once 只能提交一次(.once
修饰符还能被用到自定义的组件事件上。)
6、@click.native
//给vue组件绑定事件时候,必须加上native ,不然不会生效(监听根元素的原生事件,使用 .native 修饰符)
//等同于在自组件中:
子组件内部处理click事件然后向外发送click事件:$emit("click".fn)
7、.passive
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成 -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<!-- 这个 .passive 修饰符尤其能够提升移动端的性能。 -->
<div v-on:scroll.passive="onScroll">...</div>
不要把 .passive
和 .prevent
一起使用,因为 .prevent
将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive
会告诉浏览器你不想阻止事件的默认行为。
8、@keyup.enter //按键修饰符(按键码的别名:.enter ,.tab ,.delete ,.esc ,.space ,.up ,.down ,.left ,.right
)
//按下enter时,执行方法test3
<input type="text" @keyup.enter="test3">
methods: {
test3 (event) {
console.log(event.keyCode)
alert(event.target.value)
}
}
你还可以通过全局 config.keyCodes
对象自定义按键修饰符别名:
// 可以使用 `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112
9、系统修饰键(.ctrl , .alt , .shift ,.meta
)
<!-- Alt + C -->
<input @keyup.alt.67="clear">
<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>
10、.exact修饰符
//.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。
<!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
<button @click.ctrl="onClick">A</button>
<!-- 有且只有 Ctrl 被按下的时候才触发 -->
<button @click.ctrl.exact="onCtrlClick">A</button>
<!-- 没有任何系统修饰符被按下的时候才触发 -->
<button @click.exact="onClick">A</button>
更多推荐
所有评论(0)