ng: ОШИБКА: невозможно разрешить все параметры для компонента при попытке передать контекст в ComponentPortal - PullRequest
0 голосов
/ 22 декабря 2018

Попытка передать контекст в 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 компилятор строит нормально

...