@angular/cdk/portal小结

Portal 要渲染的特殊封装对象

PortalOutlet 是一个可以包含单个Portal的容器

export interface PortalOutlet {
  // 附加portal
  attach(portal: Portal<any>): any;
  // 剥离portal
  detach(): any;
  // 销毁
  dispose(): void;
  // 检查
  hasAttached(): boolean;
}
复制代码

BasePortalOutlet 基础PortalOutlet功能实现

abstract attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T>;
abstract attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C>;
复制代码

DomPortalOutlet PortalOutlet的Dom扩展实现

export class DomPortalOutlet extends BasePortalOutlet {
  constructor(
      public outletElement: Element,
      private _componentFactoryResolver: ComponentFactoryResolver,
      private _appRef: ApplicationRef,
      private _defaultInjector: Injector) {
    super();
  }
}
复制代码

CdkPortalOutlet PortalOutlet的Directive扩展实现

export class CdkPortalOutlet extends BasePortalOutlet{
  constructor(
      private _componentFactoryResolver: ComponentFactoryResolver,
      private _viewContainerRef: ViewContainerRef) {
    super();
  }
}
复制代码

OverlayRef PortalOutlet的弹框实现

export class OverlayRef implements PortalOutlet {
  constructor(
      private _portalOutlet: PortalOutlet,
      private _host: HTMLElement,
      private _pane: HTMLElement,
      private _config: ImmutableObject<OverlayConfig>,
      private _ngZone: NgZone,
      private _keyboardDispatcher: OverlayKeyboardDispatcher,
      private _document: Document
  ) {
    
  }
}
复制代码

Overlay

// 创建overlay容器,用于attach一个Portal或者detach
create(config: any): OverlayRef;
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值