Angular - 如何在单击处理程序中访问nativeElement

时间:2018-05-27 18:22:50

标签: angular elementref

也许只有一个"时尚"但尽管如此......

我正在使用以下工作:

// 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听起来像是黑客(下划线表示私有属性,如_privateVar,isn&#39; t)。

那么访问nativeElement是一种更优雅的方式,甚至更好的方式是访问它的媒体ID&#39;属性?

非常感谢任何暗示。

修改

此问题的答案在 user184994 JB Nizet 的评论中。由于他们都正确地解决了这个问题,我无法设置接受的答案&#34;标志,因为它只能被分配一次。

因此,我将我的问题编辑为对此的承认。

1 个答案:

答案 0 :(得分:1)

已经给出了答案,但我想补充一点并回答它。 您正在使用按钮,对于大多数浏览器, 会提交默认类型的按钮。 如果尝试删除则会提交 ,如果您不想要,可以将其类型更改为public String GetDeviceipMobileData(){ try { for (java.util.Enumeration<java.net.NetworkInterface> en = java.net.NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { java.net.NetworkInterface networkinterface = en.nextElement(); for (java.util.Enumeration<java.net.InetAddress> enumIpAddr = networkinterface.getInetAddresses(); enumIpAddr.hasMoreElements();) { java.net.InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } } } } catch (Exception ex) { Log.e("Current IP", ex.toString()); } return null; } public String GetDeviceipWiFiData(){ android.net.wifi.WifiManager wm = (android.net.wifi.WifiManager) getSystemService(WIFI_SERVICE); @SuppressWarnings("deprecation") String ip = android.text.format.Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress()); return ip; }

type = "button"

另外如果你想要 ,你可以只传递id ,只需使用<div *ngFor="let media of period.media"> <button type = "button" #btn (click)="onDeleteClick(media)" [attr.media-id]="media.ID">{{'DELETE' | translate}}</button> </div> 这就更好了性能 。如果您不需要,可以删除模板varibale //component.ts

onDeleteClick(media.id)

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

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