2017-03-09 2 views
5

Ich baue eine App in eckigen 2. Ich möchte ein Klick-Ereignis zu einem dynamisch hinzugefügten HTML-Element hinzufügen. Ich definiere eine Zeichenfolge (contentString), und in dieser Zeichenfolge definiere ich das HTML-Element.Wie click -Ereignis hinzufügen zu dynamisch hinzugefügt HTML-Element in Typoskript

var contentString = '<b>' + this.mName + '</b><br/> ' + this.mObject.category + '<br/> Click here for more information <button (click)="navigate()">Navigate here</button>'; 

Diese Zeichenkette wird in einem HTML-Element so:

var boxText = document.createElement("div"); 
    boxText.innerHTML = contentString; 

Obwohl, wenn ich das Element inspizieren, es das Click-Ereignis definiert wurde, aber es löst nicht.

[image 1]

[image 2]

auf klicken sollte es

navigate() { 
console.log("eeeehnnananaa"); 
} 

log trösten Aber das funktioniert nicht. Wer eine Lösung?

+0

, warum Sie nicht verwenden, um die Winkel html hinzufügen? –

+0

@MujtabaKably Wie würdest du das machen? Ich weiß nicht, wie man diesen Code schreibt – FerialTeut

+1

https://stackoverflow.com/questions/36116770/angular2-catch-subscribe-to-click-event-in-dynamic-added-html/36116838#36116838 Ich denke das wird dein Problem lösen. –

Antwort

6

Angular verarbeitet die Vorlage, wenn die Komponente kompiliert wird. Später hinzugefügtes HTML wird nicht mehr kompiliert und Bindungen werden ignoriert.

können Sie verwenden

constructor(private elRef:ElementRef) {} 

ngAfterViewInit() { 
    // assume dynamic HTML was added before 
    this.elRef.nativeElement.querySelector('button').addEventListener('click', this.onClick.bind(this)); 
} 
+0

FYI - nicht sicher, warum, aber addEventHandler gab "keine Funktion" Fehler zurück. Gebrauchte addEventListener und hat super funktioniert! – firas489

+0

@ firas489 vielen dank für den hinweis. Das war ein Fehler. Ich habe es repariert. –

Verwandte Themen