Angular CDK Portal,多个Portal到一个PortalOutlet?
Angular CDK Portal, multiple Portals to one PortalOutlet?
正如标题所述,是否真的可以使用 Angular CDK portals/portalOutlets 将多个门户附加到一个 PortalOutlet,我一直在挖掘 CDK 源代码,但似乎无法找到任何表明这是可能的东西。
主要是在portals.ts.
这段代码上得出这个结论
attach(portal: Portal<any>): any {
if(!portal) {
throwNullPortalError();
}
if(this.hasAttached()) {
throwPortalAlreadyAttachedError();
}
if (this._isDisposed) {
throwPortalOutletAlreadyDisposedError();
}
if (portal instanceof ComponentPortal) {
this._attachedPortal = portal;
return this.attachComponentPortal(portal);
} else if (portal instanceof TemplatePortal) {
this._attachedPortal = portal;
return this.attachTemplatePortal(portal);
}
在这种情况下,我显然可以创建多个 portalOutlets 或叠加层,并使用 componentFactoryResolver 将组件门户单独附加到每个叠加层,但同样不是我所追求的场景。
这确实不可能。您可以做的是为您的门户创建一个通用容器,然后仅 attach/detach 该容器到 PortalOutlet,具体取决于是否要显示 1 个或多个门户。
您必须创建自己的附加视图逻辑,但使用 viewContainerRef
非常简单
正如标题所述,是否真的可以使用 Angular CDK portals/portalOutlets 将多个门户附加到一个 PortalOutlet,我一直在挖掘 CDK 源代码,但似乎无法找到任何表明这是可能的东西。
主要是在portals.ts.
这段代码上得出这个结论attach(portal: Portal<any>): any {
if(!portal) {
throwNullPortalError();
}
if(this.hasAttached()) {
throwPortalAlreadyAttachedError();
}
if (this._isDisposed) {
throwPortalOutletAlreadyDisposedError();
}
if (portal instanceof ComponentPortal) {
this._attachedPortal = portal;
return this.attachComponentPortal(portal);
} else if (portal instanceof TemplatePortal) {
this._attachedPortal = portal;
return this.attachTemplatePortal(portal);
}
在这种情况下,我显然可以创建多个 portalOutlets 或叠加层,并使用 componentFactoryResolver 将组件门户单独附加到每个叠加层,但同样不是我所追求的场景。
这确实不可能。您可以做的是为您的门户创建一个通用容器,然后仅 attach/detach 该容器到 PortalOutlet,具体取决于是否要显示 1 个或多个门户。
您必须创建自己的附加视图逻辑,但使用 viewContainerRef
非常简单