Angular8-如何通过InjectionToken和ComponentPortal将输入传递到CDK Overlay
我有两个组件:主组件和确认组件(覆盖) 单击主组件上的按钮时,应触发确认组件以角度CDK覆盖打开 问题是,我不能像许多其他ie建议的那样,通过自定义注入器和注入令牌将任何内容从主组件传递到确认组件 我在Stackblitz上的代码: 我在代码中遗漏了什么愚蠢的东西吗?我一直在得到StaticInjectorError和NullInjectorError 首先非常感谢各位 主组件:Angular8-如何通过InjectionToken和ComponentPortal将输入传递到CDK Overlay,angular,angular-material,angular-cdk,angular-dependency-injection,Angular,Angular Material,Angular Cdk,Angular Dependency Injection,我有两个组件:主组件和确认组件(覆盖) 单击主组件上的按钮时,应触发确认组件以角度CDK覆盖打开 问题是,我不能像许多其他ie建议的那样,通过自定义注入器和注入令牌将任何内容从主组件传递到确认组件 我在Stackblitz上的代码: 我在代码中遗漏了什么愚蠢的东西吗?我一直在得到StaticInjectorError和NullInjectorError 首先非常感谢各位 主组件: export const OVERLAY_DATA = new InjectionToken<any>
export const OVERLAY_DATA = new InjectionToken<any>("OVERLAY_DATA");
@Component({
selector: "my-app",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent {
constructor(
public overlay: Overlay,
public viewContainerRef: ViewContainerRef,
private injector: Injector
) {}
public onClick() {
const config = new OverlayConfig({
hasBackdrop: true,
scrollStrategy: this.overlay.scrollStrategies.block()
});
config.positionStrategy = this.overlay.position()
.global()
.centerHorizontally()
.centerVertically();
const overlayRef = this.overlay.create(config);
overlayRef.backdropClick().subscribe(() => {
overlayRef.dispose();
});
const componentPortal = new ComponentPortal(
HelloComponent,
this.viewContainerRef,
this.createInjector('TestDataStringToPass')
);
overlayRef.attach(componentPortal);
}
private createInjector(dataToPass): PortalInjector {
const injectorTokens = new WeakMap();
injectorTokens.set(OVERLAY_DATA, dataToPass);
return new PortalInjector(this.injector, injectorTokens);
}
}
export class HelloComponent {
public displayData: any;
constructor(@Inject("OVERLAY_DATA") public data: any) {
console.log("OVERLAY_DATA :", data);
this.displayData = data;
}
}
请参考此链接中的此答案为我工作[链接]?请参考此链接中的此答案为我工作[链接]?