即时添加/删除组件

时间:2015-12-04 17:05:04

标签: angularjs dynamic components dispose angular

我需要能够添加&在运行中删除角度2组件。为此,我使用了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破坏组件,或者至少强制它创建新组件?

1 个答案:

答案 0 :(得分:8)

正如Tim所说,

引用@ tbosch的{​​{3}}

  

Angular默认重用以前创建的DOM元素

为了避免这种行为,也可以从评论中获取,您可以使用APP_VIEW_POOL_CAPACITY并将其0作为值。

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

更新

请注意,由于comment删除了beta.1 APP_VIEW_POOL_CAPACITY,因此正在重新创建DOM。