У меня есть следующий веб-компонент:
import { Component, h, Element, Prop } from '@stencil/core';
import { Schedule } from '../../interfaces/schedule';
@Component({
tag: 'event-schedules-tab',
styleUrl: 'event-schedules-tab.css'
})
export class EventSchedulesTab {
/**
* The first name
*/
@Prop() schedules: Schedule[];
@Element() element: HTMLElement;
componentDidLoad() {
this.displayTickets();
}
displayTickets() {
if (this.schedules !== undefined) {
let divSchedules: HTMLDivElement = this.element.querySelector("#schedules");
for (let i = 0; i < this.schedules.length; i++) {
let eventSchedule = document.createElement("event-schedule");
eventSchedule.schedule = this.schedules[i];
divSchedules.appendChild(eventSchedule);
}
console.log("schedules is defined");
}
console.log("display schedules");
}
render() {
return [
<div id="schedules" class="bg-gray-100"></div>
];
}
}
Теперь внутри другого веб-компонента у меня отображается этот тег:
import { Component, h, Prop, Element } from '@stencil/core';
import { EventItem } from '../../interfaces/event-item';
import { Event } from '../../services/event'
@Component({
tag: 'event-details',
styleUrl: 'event-details.css'
})
export class EventDetails {
/**
* The first name
*/
@Prop() slug: string;
@Element() element: HTMLElement;
private eventsService: Event = new Event();
componentDidLoad() {
this.displayEvent();
}
async displayEvent() {
if (this.slug !== undefined) {
this.eventsService.fetchTickets(this.slug).then(async (response) => {
let event: EventItem = await response.json();
let thumbnail: HTMLElement = this.element.querySelector(".modal .thumbnail");
thumbnail.setAttribute("src", event.banners[0]);
let category: HTMLElement = this.element.querySelector(".modal .category");
category.innerText = event.category;
let title: HTMLElement = this.element.querySelector(".modal .title");
title.innerText = event.name;
let description: HTMLElement = this.element.querySelector(".modal .description");
description.innerText = event.description;
let eventSchedulesTab: HTMLEventSchedulesTabElement = this.element.querySelector("event-schedules-tab");
eventSchedulesTab.schedules = event.schedules;
let eventSummaryTab = this.element.querySelector("event-summary-tab");
eventSummaryTab.summary = event.description;
//console.log(event);
}, (error) => {
console.log(error);
})
}
}
render() {
return [
<div class="flex flex-col">
<event-schedules-tab></event-schedules-tab>
<event-summary-tab></event-summary-tab>
</div>
];
}
}
Когда загружается мой компонент сведений о событии, данныеизвлекается с моего сервера, и ответ назначается моему компоненту табуляции событий:
let eventSchedulesTab: HTMLEventSchedulesTabElement = this.element.querySelector("event-schedules-tab");
eventSchedulesTab.schedules = event.schedules;
Теперь по какой-то причине моя проблема возникает после того, как этот код будет выполнен, свойство schedules на моей вкладке событий-расписаний всегдаотображается как неопределенное.
Я подтвердил, что с сервера возвращается правильный ответ.