Angular CDK Portal, несколько порталов в один PortalOutlet? - PullRequest
1 голос
/ 30 октября 2019

Итак, как гласит заголовок, возможно ли на самом деле использовать 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, но опять же не совсем тот сценарий, который мне нужен.

1 Ответ

0 голосов
/ 30 октября 2019

Это действительно невозможно. Что вы можете сделать, это сделать один общий контейнер для ваших порталов, а затем только прикрепить / отсоединить этот контейнер к PortalOutlet, в зависимости от того, есть ли один или несколько порталов для отображения.

Вам нужно будет создать собственную логику представления присоединения, но это довольно просто, используя viewContainerRef

...