【问题标题】:Angular - How to access the nativeElement in click handlerAngular - 如何在点击处理程序中访问 nativeElement
【发布时间】:2018-05-27 18:22:49
【问题描述】:

也许只是“时尚”,但仍然......

我有以下工作:

// Template
<div *ngFor="let media of period.media">
    .
    .
    .
    <button #btn (click)="onDeleteClick(btn)" [attr.media-id]="media.ID">
        {{'DELETE' | translate}}
    </button>
</div>

//component.ts
    this.period.media = [
        {id: 123}, {id: 456}, ...
    ];
    .
    .
    .
    onDeleteClick(elem) {
        console.log(elem._elementRef.nativeElement.getAttribute('media-id'));
    }

它可以工作 (the console shows 123, 456,...),但使用 _elemntRef 访问 nativeElelement 听起来像个 hack(下划线表示私有属性,如 _privateVar,不是吗)。

那么访问 nativeElement 或者更好的方法是访问它的 'media-id' 属性呢?

非常感谢任何提示。

编辑

这个问题的答案在 user184994JB Nizet 的 cmets 中。由于他们都正确解决了问题,我无法设置“已接受答案”标志,因为它只能分配一次。

因此,我正在编辑我的问题以确认这一点。

【问题讨论】:

  • 您可以随时将其传递给您的onDeleteClick,例如onDeleteClick(btn, media.ID)
  • 视图应该来自模型,反之亦然。传递媒体,而不是对按钮的引用。并使用 media.id 获取媒体 ID:(click)="onDeleteClick(media)"。按钮上的 media-id 属性没用。
  • @user184994 和@JB_Nizet。哇,我觉得自己好傻!太简单了!我会告诉 user184994 和 JB_Nizet 发布你的 cmets 作为答案。我希望支票都被接受,但我担心不是。

标签: angular elementref


【解决方案1】:

答案已经给出,但我想再补充一点并回答。 您正在使用按钮,对于大多数浏览器,按钮的默认类型是提交。 如果尝试删除它将被提交,如果您不想要它,您可以将其类型更改为type = "button"

<div *ngFor="let media of period.media">
    <button type = "button" #btn 
  (click)="onDeleteClick(media)"
   [attr.media-id]="media.ID">{{'DELETE' | translate}}</button>
</div>

另外,如果你想要你可以只传递 id 如果你需要或想要,只需使用onDeleteClick(media.id) 这在性能方面更好。如果不需要,可以删除模板变量。
//component.ts

this.period.media = [
    {id: 123}, {id: 456}, ...
];
.
.
.
onDeleteClick(media) {
    console.log(media.id);
}

如果您只传递 id 则需要更改语法,例如

  onDeleteClick(id) {
        console.log(id);

    }

【讨论】:

  • @'v8 sagar' 感谢您提供更多详细信息。一般来说,它非常有用,但就我而言,我需要与媒体相关的整套数据。此外,我需要将额外的参数传递给点击处理程序。我正在实现一种可以动态添加/删除的“卡片”。无论如何感谢您的澄清。
猜你喜欢
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 2016-04-20
相关资源
最近更新 更多