2017-03-09 25 views
5

私は2番目にアプリケーションを構築しています。動的に追加されたhtml要素にclickイベントを追加したいと思います。 私は文字列(contentString)を定義し、この文字列でhtml要素を定義します。私は要素を検査する場合、それは定義されたクリックイベントを持っていますが、それがトリガされませんがクリックイベントをtypescriptの動的に追加されたhtml要素に追加する方法

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

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

この文字列は、このようなHTML要素の内側に置かれています。それは

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

をログコンソールすべきであるしかし、それは動作しませんクリックで

[image 1]

[image 2]

。 誰かが解決策ですか?

+0

を使用することができますか? –

+0

@MujtabaKablyどうやってやるの?私はそのコードを書く方法を知らない – FerialTeut

+1

https://stackoverflow.com/questions/36116770/angular2-catch-subscribe-to-click-event-in-dynamicically-added-html/36116838#36116838 私はこれを考えるあなたのprobleを解決します。 –

答えて

6

角度は、コンポーネントがコンパイルされたときのテンプレートを処理します。後で追加されたHTMLはコンパイルされず、バインディングは無視されます。

あなたがHTMLを追加するために、角を使用していない理由を

constructor(private elRef:ElementRef) {} 

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

FYI - 理由はわかりませんが、addEventHandlerが "not a function"エラーを返しました。使用されたaddEventListenerと素晴らしい仕事! – firas489

+0

@ firas489ヒントに感謝します。それは間違いだった。それを私が直した。 –

関連する問題