javascript - Lägga till händelselyssnare för lit-elementkomponent inuti typescript


Jag har framgångsrikt lagt till en eventlistener för min Lit-elementkomponent i min Typescript-kod:

async firstUpdated() {
  await this.updateComplete;

  // Add an event listener to our event-search component so we can switch the current event
  const eventSearch = document.querySelector('event-search');
  if(typeof eventSearch !== 'undefined') {
    eventSearch.addEventListener('select', this.changeCurrentEvent);
  }
}

async changeCurrentEvent(event) {
  await this.fetchTickets(event.id);
  this.currentEvent = event;
}

async fetchTickets(eventId: number) {
  try {
    this.tickets = await fetchData(ticketEndpoint(eventId))
  } catch (error) {}
}

Men när jag kör evenemanget får jag följande fel:

Uncaught (in promise) TypeError: this.fetchTickets is not a function at HTMLElement.<anonymous>

Tydligen hamnar det i changeCurrentEvent-funktionen men det kan inte hitta fetchTickets-funktionen.

Svar #1

Du kan använda ES6:s pilfunktionssyntax för att slippa skriva this.changeCurrentEvent.bind(this).

changeCurrentEvent = async (event) => {
  await this.fetchTickets(event.id);
  this.currentEvent = event;
}

Relaterade artiklar