Я начал со Stencil некоторое время go, а сегодня я провел эксперимент с всплывающими событиями.
По сути, я щелкнул дочерний элемент и прослушал его родительский элемент для mousedown
. Я ожидал, что event.target
будет моим дочерним компонентом. Это очень просто, например, если я запускаю этот тест с обычными элементами DOM (не с трафаретом), все работает как положено
DEMO
Но в Stencil event.target
является родительским элементом. Вот что я сделал. Мой родительский компонент выглядит так:
@Component({
tag: 'app-root',
styleUrl: 'app-root.scss',
shadow: true
})
export class MyApp {
@Listen('mousedown')
onMousedown(event) {
console.log(event.target, event.currentTarget);
}
render() {
return (
<div>
<my-element></my-element>
</div> );
}
}
И дочерний
@Component({
tag: 'my-element',
styleUrl: './my-element.scss',
shadow: true
})
export class MyElement {
@Listen('mousedown')
onMouseDonw(e) {
console.log(e.target);
}
render() {
return ( <div>YO</div> );
}
}
Теперь, как я уже сказал, когда я нажимаю my-element
, я сначала вижу console.log
из my-element
, что подтверждает, что event.target
равно my-element
. Но затем событие приходит к своему родителю и event.target
(но также event.currentTarget
) содержит app-root
. Я заметил, что когда я устанавливаю shadow
в false
моего app-root
, все это, кажется, работает, но я не понимаю, почему, и это единственное решение моей проблемы?