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