Угловой портал CDK Отделение изнутри портала

Я использую портал Angular CDK для создания компонента сообщения об ошибке, который должен отображаться в теле (следовательно, с использованием портала) поверх всего остального.

Он работает отлично, хотя по самому сообщению об ошибке мне нужно иметь возможность закрыть его внутри компонента.

Я использую сервис для настройки портала и открытия / скрытия сообщения. Проблема в том, что я не могу вызвать метод close из самого компонента сообщения об ошибке, потому что тогда у меня есть циклическая зависимость, и все это ломается.

Я знаю, что с оверлеем CDK вы можете ссылаться на него из его компонента, есть ли способ сделать то же самое для портала, чтобы я мог отключить портал из компонента сообщения об ошибке?

Благодарю.

Вот код сервиса

private errorMessagePortal: ComponentPortal<ErrorMessageComponent>;
private bodyPortalHost: DomPortalHost;

constructor(
  private componentFactoryResolver: ComponentFactoryResolver,
  private appRef: ApplicationRef,
  private injector: Injector
) {
  this.errorMessagePortal = new ComponentPortal(ErrorMessageComponent);
  this.bodyPortalHost = new DomPortalHost(document.body, this.componentFactoryResolver, this.appRef, this.injector);
}

// show error message
showErrorMessage(errorMessage: ErrorMessage) {this.bodyPortalHost.attachComponentPortal(this.errorMessagePortal).instance.errorMessage = errorMessage;
}

closeErrorMessage() {
  this.bodyPortalHost.detach();
}

0 ответов

Что касается API портала от Angular CDK:

this.errorMessagePortal.detach()

должен сделать трюк!

Другие вопросы по тегам