Невозможно захватить данные в компоненте, используя PortalInjector в материале Angular - PullRequest
0 голосов
/ 06 июня 2018

В соответствии с документацией и комментариями к выпуску git-hub я пытаюсь реализовать пользовательский инжектор для передачи данных в компонент, который загружается динамически с использованием @angular/cdk и cdkPortalOutlet.Я могу видеть, как PortalInjector успешно создается с использованием InjectorToken, однако при попытке извлечь / использовать data в компоненте, который загружается динамически, я всегда получаю null.

data / injector.ts

import {InjectionToken,Injector} from '@angular/core';
import {PortalInjector} from '@angular/cdk/portal';
export const CONTAINER_DATA = new InjectionToken<{}>('CONTAINER_DATA');
export class DataInjector{
public createInjector(dataToPass,_injector): PortalInjector {
const injectorTokens = new WeakMap();
injectorTokens.set(CONTAINER_DATA, dataToPass);
return new PortalInjector(_injector, injectorTokens);
}
} 

component / base.component.ts

   var  di:DataInjector= new DataInjector();
   var   pi:PortalInjector=di.createInjector("AutoMode",this._injector);
   console.log("portalinjector passed is:");
   console.log(pi);
   cportal:Portal<any>=new ComponentPortal(ToolbarComponent,null,pi));

ToolbarComponent

import { Component, Inject,OnInit } from '@angular/core';
import {CONTAINER_DATA} from '../../data/injector';
@Component({
selector: 'app-toolbar',
templateUrl: './toolbar.component.html',
styleUrls: ['./toolbar.component.css']
})
export class ToolbarComponent implements OnInit {
@Inject(CONTAINER_DATA) public componentData: any
constructor() {
console.log("ToolbarComponent^dataobtained constructo is:");
console.log(this.componentData);// prints null
  }

ngOnInit() {
console.log("ToolbarComponent^dataobtained is:");
console.log(this.componentData); //prints null
}

}

Линии, помеченные как //, печатают ноль, всегда печатают null.Однако

 console.log("portalinjector passed is:");
 console.log(pi);

Отпечатки:

   PortalInjector {_parentInjector: Injector_, _customTokens: 
   WeakMap}_customTokens: WeakMap {InjectionToken => 
   "AutoMode"}_parentInjector: Injector_ {view: {…}, elDef: {…}}__proto__: 
   Object

Может кто-нибудь сообщить мне, если я что-то упустил?

...