Vue.js Сеть Модификаторов
Я новичок в Vue.js. Я читаю документы и не могу понять ни минуты...
https://vuejs.org/v2/guide/events.html
Порядок имеет значение при использовании модификаторов, потому что соответствующий код генерируется в том же порядке. Поэтому использование @click.prevent.self предотвратит все клики, в то время как @click.self.prevent предотвратит только клики на самом элементе.
Я не могу понять, что это значит.Поэтому использование @click.prevent.self предотвратит все клики, в то время как @click.self.prevent предотвратит только клики на самом элементе."Кто-нибудь может привести пример с предотвращением действий по умолчанию и показать разницу...
например со ссылками (<a href="https://stackru.com">@click.prevent.self="fn" or @click.self.prevent="fn" difference</a>
)
Я знаю о фазах событий (захват, цель и пузыри).
Например, это может быть полезно на этапе Bubbling:
<script src="https://unpkg.com/vue/dist/vue.js"></script>
.root {
width: 300px;
height: 300px;
background: green;
text-align: center;
color: white;
}
.parent {
width: 200px;
height: 200px;
background: red;
text-align: center;
color: white;
margin: 50px
}
.child {
width: 100px;
height: 100px;
background: blue;
margin: 50px;
text-align: center;
color: white;
}
<div id="app">
<div class="root" v-on:click="log('root')">root
<div class="parent" v-on:click.self.stop="log('parent')">Parent
<div class="child" v-on:click="log('child')">Child
</div>
</div>
</div>
</div>
<script type="text/javasctipt">
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!'
},
methods: {
log(message) {
alert(message);
console.log(message)
}
}
})
</script>
Если я нажму на ребенка, я получу вывод:
child
root
Bubblig не останавливается! Но если я нажму на родительском пузыре, остановился! Это полезно!
Но может ли кто-нибудь показать мне примеры и разницу, если я буду использовать предотвращение и самомодификацию (со ссылками, флажками или может быть с другими элементами)?
Спасибо за продвижение!
2 ответа
Пример иллюстрирует разницу в порядке цепочки
<div id="app">
<a href="https://stackru.com" @click.self.prevent target="_blank">Stackofervlow!
<span :style="{ background: 'yellow', width: '100px', height: '100px' }">span</span>
</a>
</div>
new Vue({
el: '#app'
});
@click.self.prevent
- Если вы нажмете на span, откроется stackru.
- Если вы нажмете на, stackru не откроется.
@ click.prevent
- Если вы нажмете на span, stackru не откроется.
- Если вы нажмете на, stackru не откроется.
Вы можете проверить этот пример: https://jsfiddle.net/50wL7mdz/39994/
Если вы используете @click.prevent.self
Вы не можете нажать на что-нибудь. Это предотвращает все щелчки. Если вы используете @click.self.prevent
, это только предотвращает, когда вы нажимаете на <a>
элемент, мы все еще можем нажать на выбрать файл, чтобы загрузить файл