Angular 动态添加/删除组件

Angular 动态添加/删除组件,angular,dynamic,components,dispose,Angular,Dynamic,Components,Dispose,我需要能够添加和删除的动态角度组件。为此,我使用loadIntoLocation和dispose方法,如: 添加组件(从布局管理器): 移除组件(从组件中): 它几乎起作用了: -如果我添加一个组件并关闭它,它就会工作 -如果我添加几个组件,它们就会工作 -但是如果我添加组件A,然后删除它,然后添加组件B,看起来Angular给了我对A的引用,并保留了一些旧值(我的组件是可拖动的,在这种情况下,B将在我销毁它时创建为A) 有没有一种方法可以正确地制造角度破坏组件,或者至少强制它创建新组件?正如T

我需要能够添加和删除的动态角度组件。为此,我使用loadIntoLocation和dispose方法,如:

添加组件(从布局管理器):

移除组件(从组件中):

它几乎起作用了: -如果我添加一个组件并关闭它,它就会工作 -如果我添加几个组件,它们就会工作 -但是如果我添加组件A,然后删除它,然后添加组件B,看起来Angular给了我对A的引用,并保留了一些旧值(我的组件是可拖动的,在这种情况下,B将在我销毁它时创建为A)

有没有一种方法可以正确地制造角度破坏组件,或者至少强制它创建新组件?

正如Tim所建议的

引用@tbosch's

默认情况下,Angular重用先前创建的DOM元素

因此,为了避免这种行为,您可以使用
APP\u VIEW\u POOL\u CAPACITY
并将其赋值为
0

bootstrap(MyApp,[provide(APP\u VIEW\u POOL\u CAPACITY,{useValue:0})])
更新
请注意,由于beta.1
APP\u VIEW\u POOL\u CAPACITY
已被删除,因此正在正确地重新创建DOM

你能在plnkr中重现这种行为吗?我有,但我不能(我真的不知道)如何复制你的IssueEyep,我用叉子叉了你的Plunk:。单击“添加新组件”,将其拖到某个位置,单击“删除”,然后再次单击“添加新组件”:该组件是在刚刚删除的位置创建的。问题似乎是angular2默认情况下重用创建的DOM元素(从中获取)。因此,如果在引导程序中设置
提供(APP\u VIEW\u POOL\u CAPACITY,{useValue:0}
,它将很好地工作。下面是答案。谢谢,它解决了问题!您可以将其添加为答案,我将选择它。
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();