.stop
阻止冒泡行为。(ps:冒泡行为:对dom进行操作是会按照dom从上到下的顺序执行,例如,点击一个div上的button也会执行div上绑定的函数。)
<div id="app">
<div class="inner" @click="div1Handler">
<input type="button" value="按钮" @click.stop="btnHandler">
</div>
</div>
var vm = new Vue({
el: '#app',
data: {},
methods: {
div1Handler() {
console.log("触发了inner的div");
},
btnHandler() {
console.log("触发了button");
},
}
})
不使用.stop:
使用.stop:
.prevent
取消默认行为。
<div id="app">
<a href="http://www.baidu.com" @click.prevent="linkClick">This is a link!</a>
</div>
var vm = new Vue({
el: '#app',
data: {
},
methods: {
linkClick() {
console.log("触发了链接的click事件")
},
}
})
点击链接,执行linkClcik()函数,但是页面没有跳转,默认行为被阻止。
.capture
将冒泡行为的层级 调到上层。
<div class="inner" @click.capture="div1Handler">
<input type="button" value="按钮" @click="btnHandler">
</div>
var vm = new Vue({
el: '#app',
data: {},
methods: {
div1Handler() {
console.log("触发了inner的div");
},
btnHandler() {
console.log("触发了button");
},
}
})
点击button,div的冒泡行为提前,div绑定的函数先执行。
.self
只有点击当前DOM才会触发绑定事件函数,与.stop取消冒泡事件不同,.self只是取消了当前DOM的冒泡行为。
<div class="outer" @click="div2Handler">
<div class="inner" @click.self="div1Handler">
<input type="button" value="按钮" @click="btnHandler">
</div>
</div>
var vm = new Vue({
el: '#app',
data: {},
methods: {
div1Handler() {
console.log("触发了inner的div");
},
btnHandler() {
console.log("触发了button");
},
div2Handler(){
console.log("触发了outer的div的点击函数")
}
}
})
只有点击inner的div才会触发绑定的函数。
.once
串联修饰行为的次数。
例如:仅阻止一次默认事件,第二次点击链接会跳转页面。
<a href="http://www.baidu.com" @click.prevent="linkClick">This is a link!</a>