web-dev-qa-db-ja.com

その場でのコンポーネントの追加/削除

Angularコンポーネントをその場で追加および削除できる必要があります。そのために、loadIntoLocationとdisposeメソッドを次のように使用しています。

(レイアウトマネージャーからの)コンポーネントの追加:

this.m_loader.loadIntoLocation(MyComponent, this.m_element, 'content').then(_componentRef => {

    // Create the window and set its title:
    var component: MyComponent = (_componentRef.instance);
    component.ref = _componentRef;

    // init the component content
});

コンポーネントの削除(コンポーネントから):

this.ref.dispose();

ほぼ機能しています:-コンポーネントを追加して閉じると機能します-複数のコンポーネントを追加すると機能します-しかし、コンポーネントAを追加してから削除し、次にコンポーネントBを追加すると、Angularは私にAへの参照を与え、いくつかの古い値を保持します(私のコンポーネントはドラッグ可能であり、この場合、Bは作成されますAは私がそれを破壊したときでした)

Angularにコンポーネントを適切に破棄させる方法、または少なくともコンポーネントに新しいコンポーネントを作成させる方法はありますか?

11
Tim Autin

ティムが提案したように、

@tboschの引用 コメント

Angularはデフォルトで以前に作成されたDOM要素を再利用します

したがって、コメントからも取得したこの動作を回避するには、APP_VIEW_POOL_CAPACITYを使用して、値として0を割り当てることができます。

bootstrap(MyApp, [provide(APP_VIEW_POOL_CAPACITY, {useValue: 0})])

更新

Beta.1 APP_VIEW_POOL_CAPACITY#599 によって削除され、DOMが正しく再作成されていることに注意してください。

8
Eric Martinez