angular - EventTarget 无法访问 classList

标签 angular angular-material

我试图让扩展面板仅在点击箭头时展开,但是当我尝试编译它时,此功能

private _isExpansionIndicator(target: EventTarget): boolean {
    const expansionIndicatorClass = 'mat-expansion-indicator';
    return (target.classList && target.classList.contains(expansionIndicatorClass) );
  } 

返回以下错误:

"Property 'classList' does not exist on type 'EventTarget'"

有什么线索可以帮助我解决此错误吗?或者您是否知道任何其他解决方法来实现相同的功能?

我让它在 stackblitz 上正常工作,没有错误...... https://stackblitz.com/edit/basic-material-e6sh1r

最佳答案

使用 console.log({event});console.log({target});,您可以看到以下内容:

  • EventTarget 实际上是 MouseEvent,而 target 属性不是固定类型。您可以查看这篇文章以了解有关该主题的更多信息:SO Post
  • 由于目标元素是 span,因此您可以通过 TypeScript 使用 HTMLSpanElement 类型来帮助您实现这一点。

这是我认为作为替代答案提出的更清晰的解决方案:

  expandPanel(matExpansionPanel: any, event: MouseEvent) {
    console.log({event});

    if (!this._isExpansionIndicator(event.target as HTMLSpanElement)) {
      matExpansionPanel.close();
    }
  }

   private _isExpansionIndicator(target: HTMLSpanElement): boolean {
    console.log({target});
    const expansionIndicatorClass = 'mat-expansion-indicator';
    return (target.classList && target.classList.contains(expansionIndicatorClass) );
  } 

关于angular - EventTarget 无法访问 classList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59501650/

相关文章:

javascript - *NgIf 的替代或更好的方法

javascript - Angular2 routerLink 参数

html - 如何将 margin-bottom 放在 mat-table (Angular 4+) 中?

angularjs - 如何在运行时创建/更改主题

html - Angular Material 布局对齐 = "center center"不工作

angular - 我可以在 PrimeNG p 下拉菜单中编辑背景吗?

javascript - 如何从本地驱动器打开文件 - Angular 4

css - 为什么我无法将边框应用于 Angular 垫表行?

angularjs - 如何使用 Angular Material Design 创建黑白主题?

angular - 如何使用 mat-autocomplete 完全重置 mat-input