typescript - Angular - HostListener direktiva i prosljeđivanje vrijednosti


Pokušavam proslijediti div s događajem klika koristeći 'innerHTML'. Budući da (click) nije radio, pokušao sam koristiti HostListener za dobivanje id-a. Ali čini se da ne mogu niti proslijediti id u innerHTML.

HTML kod

<div [innerHTML]="show" detectClick></div>

Domaćin slušatelj

@HostListener('click', ['$event.target.id']) onClick(id: any) {
    alert(`You clicked on ${id}`);
    this.test = id;
} 

Kod koji će se dinamički dodavati

this.show = this.sanitizer.bypassSecurityTrustHtml(`<div class="clickarea"><span id="123" (click)="showID('123');">x</span></div>`);

Veza na StackBlitz

Odgovor #1

Ne možete koristiti Angular specifične atribute poput (click) ili [prop] unutar innerHTML.

Ali da, možete koristiti delegiranje događaja kroz @HostListener dekorator da biste dobili kliknuti id:

detectclick.directive.ts

import { Directive, Output, HostListener, EventEmitter } from '@angular/core';

@Directive({selector: '[detectClick]'})
export class DetectClick {

  @Output() detectClick = new EventEmitter();

  @HostListener('click', ['$event.target.id']) onClick(id: any) {
    this.detectClick.emit(id);
  } 
}

parent.html

<div [innerHTML]="show" (detectClick)="showID($event)"></div>

Forkan Stackblitz