【问题标题】:Adding event listener for lit element component inside typescript为打字稿中的点亮元素组件添加事件侦听器
【发布时间】:2020-05-08 14:30:30
【问题描述】:

我已经在我的 Typescript 代码中成功地为我的 Lit 元素组件添加了一个事件监听器:

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) {}
}

但是,在执行事件时,我收到以下错误:

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

显然它确实位于changeCurrentEvent 函数中,但它找不到fetchTickets 函数。

【问题讨论】:

  • changeCurrentEvent 被执行时,this 上下文正在丢失。你可以试试eventSearch.addEventListener('select', this.changeCurrentEvent.bind(this))
  • 你不是binding the event listener in your template的原因,例如<event-search @select=${this.changeCurrentEvent}>?

标签: javascript typescript lit-element


【解决方案1】:

您可以使用 ES6 箭头函数语法来避免编写 this.changeCurrentEvent.bind(this)

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

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 2018-11-16
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多