Angular CDK 门户从门户内分离

标签 angular angular-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();
}

最佳答案

截至portal API来自 Angular CDK:

this.errorMessagePortal.detach()

应该可以解决问题!

关于Angular CDK 门户从门户内分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51304012/

相关文章:

angular - 使用 ng2-semantic-ui 在 select 中加载远程选项不起作用

angular - 如何配置一个在大屏幕和小屏幕上都很好用的 Material cdk 覆盖位置策略?

html - Angular Material mat-slide-toggle 切换仅适用于第一个组件

angular - 如何取消订阅路由解析类中的可观察对象

javascript - 外部 js 文件在 Angular 2 组件内不起作用

angular - expressjs与angular2的通信

javascript - 升级到 Angular 6 并且 jQuery 停止工作

angular - 在Mat-Dialog(Angular Material CDK)上拖放无效。先前和当前索引有误

angular - 无法从 BackdropClick 关闭 Angular Material Cdkoverlay

javascript - 当光标不在 Material cdk 拖放中的拖放区时,删除拖放区的占位符