Попытка передать контекст в ComponentPortal с помощью пользовательского маркера внедрения, и это работает, однако build --prod вызывает:
Ошибка: невозможно разрешить все параметры для TooltipComponent
Если я помещаю экспорт своего InjectionToken в Сервис, который генерирует мой Портал, Ошибки исчезают, но у меня есть служба циклической зависимости -> компонент -> Сервис
Сервис:
import { ApplicationRef, ComponentFactoryResolver, Injectable,
InjectionToken, Injector } from '@angular/core';
import { BasePortalOutlet, ComponentPortal, DomPortalOutlet,
PortalInjector, PortalOutlet } from '@angular/cdk/portal';
import { TooltipComponent } from './tooltip.component';
import TooltipDataInjector from './TooltipInjector';
@Injectable({
providedIn: 'root'
})
export class TooltipService {
private _tooltipPortal: ComponentPortal;
private _bodyPortalHost: DomPortalOutlet;
constructor(
private _factoryResolver: ComponentFactoryResolver,
private _appRef: ApplicationRef,
private _injector: Injector,
) {
this._tooltipPortal = new ComponentPortal(
TooltipComponent,
undefined,
this.createInjector({ })
);
this._bodyPortalHost = new DomPortalOutlet(
document.body,
this._factoryResolver,
this._appRef,
this._injector
);
}
createInjector(data): PortalInjector {
const tokens = new WeakMap([
[TooltipDataInjector, data]
]);
return new PortalInjector(this._injector, tokens);
}
show() {
if (this._bodyPortalHost.hasAttached()) {
this._bodyPortalHost.detach();
}
this._bodyPortalHost.attach(this._tooltipPortal);
}
hide() {
this._bodyPortalHost.detach();
}
}
Компонент:
import { Component, Inject, OnInit, Optional } from '@angular/core';
import TooltipDataInjector from './TooltipInjector';
@Component({
selector: 'app-tooltip',
templateUrl: './tooltip.component.html',
styleUrls: ['./tooltip.component.scss']
})
export class TooltipComponent implements OnInit {
constructor(@Optional() @Inject(TooltipDataInjector) public data: any) {
console.log(data);
}
ngOnInit() {
}
}
TooltipInjector.ts:
import { InjectionToken } from '@angular/core';
export const TooltipDataInjector = new InjectionToken('TooltipDataInjector');
export default TooltipDataInjector;
Как можно избежать этих ошибок?JIT компилятор строит нормально