Angular Material |按下按钮文本时, Material 按钮的行为有所不同

标签 angular typescript angular-material

考虑以下代码:

HTML:

<button mat-flat-button id="test" (click)="toggle($event)">Click me!</button>

组件:

toggle(event) {
  let id: string = (event.target as Element).id;
  console.log(id)
  console.log(event.target)
}

按下按钮将触发以事件作为参数的toggle函数。 系统将记录“test”(id)和按钮事件。

按下按钮上的文本将记录一个未定义的id和一个带有mat-button-wrapper类的span

问题:如果按下按钮文本,我想获取按钮事件目标(而不是跨度事件目标),我该如何实现这一目标?

最佳答案

点击事件行为正常。在 JavaScript 中,当在源元素上触发事件时,它会从源“冒泡”并通过祖先元素树向上传播。

所以当你有这样的 DOM 结构时:

<button mat-flat-button>
    <span>Click me!</span>
</button>

span 上的单击事件向上冒泡到文档根目录时,该事件将向上传播到 button

如果你想获取按钮元素,你可以使用 Template Reference Variable并将其传递到您的事件处理程序中:

<button mat-flat-button id="test" #testButton (click)="toggle(testButton)">Click me!</button>

关于 Angular Material |按下按钮文本时, Material 按钮的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53596771/

相关文章:

angularjs - 如何用 Angular Material 实现经典的 "sticky footer"?

angular - 如何从子组件打开 MdSidenav?

javascript - Typescript 中动态 React 组件的条件类型

Angular Material 选项卡 : Prevent tab change of mat-tab-group if the form in current tab is dirty

javascript - Angular 2 DI 编码到接口(interface)

javascript - 如何模拟用户对输入和按钮元素的交互?

angular - 如何在 Angular2 中切换布局

javascript - AngularJS Hello World

javascript - 如何在 tsconfig.json 中设置 'language_in' 选项?

angularjs - 具有多个 md-二级操作的 md-list