これは実際にはhereから派生したものですが、使用例ははるかに単純です。Angular ディレクティブを含む外部から追加された DOM 要素があることを Angular2 に知らせる方法についてです。この場合、クリック イベントがバインドされない新しいクリック ボタンを追加します。Imo Zone はコンポーネントのテンプレートの変更を自動的に検出すると思っていましたが、明らかにそうではありません。ボタンの新しいコンポーネントを作成し、それを介してロードするという莫大なオーバーヘッドなしで、そのコードを機能させることができる人はいますDynamicLoaderComponent
か?
注:私はすでに and を追加NgZone
しChangeDetectorRef
て遊んでいます。どちらも私にとってはうまくいきませんでした。
plunkr の完全な例へのリンクは次のとおりです: plnkr.co/edit/hf180P6nkxXtJDusPdLb
そして、これはコンポーネントからの関連する抜粋です:
import {Component, AfterViewInit, ChangeDetectorRef, NgZone, Renderer} from '@angular/core'
@Component({
selector: 'my-app',
providers: [],
template: `
<div>
<p><button on-click="clickMe()">This works</button></p>
<div id="insert-here"></div>
</div>
`,
directives: []
})
export class App implements AfterViewInit {
constructor(private ref:ChangeDetectorRef, private ngZone:NgZone, private renderer:Renderer) {
}
clickMe() {
alert("Yay, it works");
}
ngAfterViewInit() {
let newButton = document.createElement("button");
newButton.setAttribute("on-click","clickMe()");
let textNode = document.createTextNode("This does not");
newButton.appendChild(textNode);
document.getElementById("insert-here").appendChild(newButton);
// please make my button work:
this.ref.detectChanges();
}
}