- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
嘿...我找到了一篇关于使用动态组件加载器和处置方法添加和删除组件的帖子。我想一次销毁所有创建的组件。我有 plunker demo以及我找到演示的来源 Angular 2 - Adding / Removing components on the fly ...我知道我想将所有 componentref
存储在一个数组中然后迭代它们并处理它......但我无法让它工作......请帮助我如何销毁所有组件.
remove() {
this._ref.dispose();
}
这就是我销毁单个组件的方式...如何一次销毁所有组件?
最佳答案
完成您所要求的操作的最简单方法是在添加 ComponentRef
时跟踪它们,并在每个中调用 dispose()
当你想删除它们时的循环。参见 updated plunk
export class App {
...
private _children:ComponentRef[] = [];
add() {
this._dcl.loadIntoLocation(DynamicCmp, this._e, 'location').then((ref) => {
...
this._children.push(ref);
});
}
removeall(){
this._children.forEach(cmp=>cmp.dispose());
this._children = []; // not even necessary to get the components off the screen
}
}
如果出于某种原因只调用一次 dispose()
非常重要,您可以创建一个“容器”,将您的 DynamicComponent
作为其子项添加,然后处理容器,自动处理它的 child 。
话虽如此,我无法想象我更愿意这样做而不是添加四行代码来实现我上面概述的内容......
说完全部:如果有一种方法可以使用数据绑定(bind)来完成您想要做的事情,那么您应该更倾向于使用它而不是求助于 DynamicComponentLoader
除非你有充分的理由不这样做。
我会第一个告诉你有 需要 DCL 的用例,但根据我(虽然简短)的经验,对于每五个我最初认为需要的用例,我想出了在稍微考虑一下之后,至少有三个数据绑定(bind)解决方案。
在这种情况下,这样做很简单 - 请参阅 other updated plunk :
@Component({
selector: 'my-app',
template : `
<button (click)="add()">Add new component</button>
<button (click)="removeAll()">Remove All</button>
<template ngFor #child [ngForOf]="children">
<div [dynamicCmp]="child"></div>
</template>
`,
directives:[DynamicCmp]
})
export class App {
children:number[] = [];
add() {
this.children.push(this.children.length+1);
}
removeAll(){
this.children = [];
}
}
关于typescript - 如何销毁在 angular2 中使用 DynamicComponentLoader 创建的所有组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34585357/
使用任何方法(例如 loadIntoLocation)我可以将指令动态加载到我的基本组件到特定容器中! @Component({ ... template: ` empty div` ...}) 然后
我正在尝试创建一个表组件,该组件将从列描述和原始数据构建一个表。 我能够毫无问题地创建基本功能,但我也希望能够覆盖单个单元格的默认呈现,以便能够显示自定义内容(例如,显示链接)。 以与 DataTab
背景 我有一个代表文件夹列表和文档类别的数据;我通过网络界面从我们的信息管理软件中获取它。从每个项目都有 ParentFolderNo 的原始列表中我用 children: any[] 创建了一个对象
我正在尝试让 loadIntoLocation 正常工作,但我不断收到错误消息, 类型“DynamicComponentLoader”上不存在属性“loadIntoLocation”。 我查看了其他示
我正在尝试使用DynamicComponentLoader,示例代码如下: import {Component, View, bootstrap, OnInit, DynamicComponentL
我正在将 beta.14 的 Angular 2 应用程序升级到 rc.4。 我在@angular/core 中的 DynamicComponentLoader 上收到弃用警告。 要使用的新类是什么?
嘿...我找到了一篇关于使用动态组件加载器和处置方法添加和删除组件的帖子。我想一次销毁所有创建的组件。我有 plunker demo以及我找到演示的来源 Angular 2 - Adding / Re
我正在 RC5 中创建一个 angular2 应用程序,我想在其中动态加载组件。 在 RC1 中,我使用 dynamicComponentLoader 做了同样的事情: @Component({
我不使用 typescript ,而是使用ES6 和angular2 alpha39 来动态加载组件。以下代码类似于我在我的应用程序中的代码。我注意到 angular2 不会创建 DynamicCom
我无法让 Angular 的 DynamicComponentLoader 在 beta.6 中工作 我已经采用了动态组件加载的示例代码 from their docs ,并将其添加到 plnkr,
DynamicContentLoader 文档没有解释如何正确加载子组件的输入。假设我有一个这样的 child : @Component({ selector: 'child-component'
长话短说: works but not dynamic dynamic but doesn't work 解释: 我正在使用 DynamicComponentLoader 动态创建 Angular 2
我正在开发一个 Angular2 应用程序,我遇到了一个问题: 我有一组可以使用 UI 选择的不同对象。每个对象都有一组选项(不同的对象不同),可以使用 UI 进行编辑。现在,我正在使用 Dynami
我是一名优秀的程序员,十分优秀!