2017-01-04 16 views
0

セレクタdynamically-addedにいくつかのコンポーネントDynamicallyAddedComponentが関連付けられているとします。 ParentComponentには、内部DOMツリーを操作し、<dynamically-added>タグを追加または削除する可能性のある、他の非角のサードパーティのJavaScriptが含まれています。DOM要素が別のjavascriptライブラリによって作成されたAngular2コンポーネントを登録するにはどうすればよいですか?

ParentComponentのテンプレートに直接<dynamically-added>タグを追加すると、レンダリングがうまくいきますが、サードパーティのライブラリでタグを追加すると、コンポーネントが追加されたことを角度で認識できません。

@NgModule宣言に両方のコンポーネントを追加しました。app.module.tsです。また、サードパーティの変更イベントのイベントハンドラの内側にChangeDetectorRef.detectChanges()ApplicationRef.tick()の呼び出しを追加しました。

コンポーネントを追加または削除したことを手動でAngularに伝えるにはどうすればよいですか? Angularはコンポーネントを内部でどのように認識し、ブートストラップするのですか?

+0

あなたは常にもあなたが 'ブレークポイントを追加することができますDOM要素が' scenes'と 'DEBUG'オプションの後ろに変更されているかを確認するには、Webブラウザの' inspect'機能を使用することができインサイドあなたが私のことを覚えてくれてありがとうと思います。 – mike510a

+0

@ mike510a私は以前これを使用しましたが、この例では使用していません。残念ながら、手元にある問題には、DOM要素が必要なときには変更されていないので、デバッグするための変更動作はありません。これは役立つアドバイスですが、私はそれが便利だろうと確信しています:) – pixelpax

答えて

1

ngZoneの中でサードパーティのイベントを実行すると、DOMの変更が検出されます。

component.ts

constructor(public ngZone: NgZone) {} 
ngZone.run(() => { // Change the property within the zone 
    //3rd party event action 
}); 
+0

Raj--チップのおかげで!この例では、私が追加する要素の位置を制御する必要のある第三者のライブラリを扱っています(私はリッチテキストエディタの内部にng2コンポーネントを配置しようとしていますので、このアプリケーションに要素配置を制御できます)交渉はできません)。 私ができることは、サードパーティライブラリの '要素作成'コールバックからDOMノードの作成を制御することです。 ngZone実行環境内からノードを作成すると、ここで役立ちますか?正確に角度がDOM要素に注意を払うことを決めるとき? – pixelpax

+0

'' ngZone.run''の中に作成インスタンスを追加してください。やってみて。 ngZoneは内部で発生した変更を検出します。 – raj

関連する問題