У меня есть main.js, который выполняет вызов API и получает объект ответа.После ответа я хочу запустить событие, которое прослушивает мой пользовательский веб-компонент.
makeRequest(request).then((response) => { // NOTE: the API in question returns a Promise, thus using 'then()'
dispatchCustomEvent(response);
});
let dispatchCustomEvent = (response) => {
console.log('dispatchCustomEvent called', response);
let myCustomEvent = new CustomEvent('package-ready',
{
bubbles: true,
composed: true,
detail: response
}
);
return document.dispatchEvent(myCustomEvent);
}
Это событие работает в основном документе.Я подключил слушателя к основному документу для проверки , но он не слышен в моем пользовательском компоненте .
window.customElements.define('app-list',
class AppList extends HTMLElement {
constructor() {
super();
let shadowRoot = this.attachShadow({mode: 'open'});
this.addEventListener('package-ready', e => console.log('package-ready heard on app-list', e.detail));
shadowRoot.addEventListener('package-ready', e => console.log('package-ready heard on app-list Shadow Root', e.detail));
}
}
Как вы можете видеть сверху, я прикрепил слушателякак для компонента (с this
), так и для его теневого корня (для целей тестирования).
Событие не определено в определенном веб-компоненте.Я подумал, что это может иметь какое-то отношение к фазе захвата событий (и, возможно, добавить еще один флаг в мой объект параметров пользовательских событий.
Я все еще изучаю все входы и выходы веб-компонентов и не выяснил,этот кусок. Любая помощь будет оценена!