Итак, когда вы щелкаете синий контент, я хочу его скрыть, но не если вы щелкаете дочерний элемент, например h2, a, p и т. д. Возможно ли это?
Пожалуйста, посмотрите скрипку
html
<html>
<head></head>
<body>
<div id = "app">
<div v-if = "modal" id = "content" @click = "toggle">
<h3>
Name
</h3>
<span>
<a href = "">Like this (don't close if clicked)</a>
</span>
</div>
<button @click = "toggle">Toggle</button>
</div>
</body>
</html>
.js
new Vue({
el: '#app',
data: {
modal: true
},
methods: {
toggle: function( ){
this.modal = !this.modal
}
}
});
.css
a {
color: white
}
#content {
width: 300px;
height: 300px;
background: blue;
color: white;
}
Рабочий пример: http://jsfiddle.net/awu752mr/6/





Я считаю, что это то, что делает модификатор v-on:click.self. Смотрите здесь в документации.
Как ответил @LShapz, рекомендуется использовать модификатор = .self (стиль Vue).
Другой способ - сравнить $event.target === $event.currentTarget (не рекомендуется для вашего варианта использования, но вы можете использовать эти два свойства для некоторых других ситуаций в будущем).
Vue.config.productionTip = false
new Vue({
el: '#app',
data: {
modal: true
},
methods: {
toggle: function(ev){
if (ev.target === ev.currentTarget) this.modal = !this.modal
}
}
});a {
color: white
}
#content {
width: 300px;
height: 300px;
background: blue;
color: white;
}<script src = "https://unpkg.com/[email protected]/dist/vue.js"></script>
<div id = "app">
<div v-if = "modal" id = "content" @click = "toggle($event)">
<h3>
Name
</h3>
<span>
<a href = "">Like this</a>
</span>
</div>
<button @click = "toggle">Toggle</button>
</div>