【发布时间】:2018-09-05 22:28:08
【问题描述】:
我遇到了由我的自定义 Injector 创建的循环依赖项
代码运行良好,直到到达这一行:
const componentPortal = new ComponentPortal(ConfirmDialogComponent, null, customInjector);
这会在终端和浏览器的控制台中产生以下错误:
检测到循环依赖中的警告: src\app\confirm-dialog.service.ts -> src\app\confirm-dialog\confirm-dialog.component.ts -> src\app\confirm-dialog.service.ts
检测到循环依赖中的警告: src\app\confirm-dialog\confirm-dialog.component.ts -> src\app\confirm-dialog.service.ts -> src\app\confirm-dialog\confirm-dialog.component.ts
并在浏览器的控制台中产生此错误:
未捕获的错误:无法解析 ConfirmDialogComponent 的所有参数:(?)。
@Injectable({
providedIn: 'root'
})
export class ConfirmDialogService {
constructor(
private overlay: Overlay,
private injector: Injector,
) { }
public open() {
const overlayRef = this.overlay.create();
const dialogRef = new CustomOverlayRef(overlayRef);
const customInjector = this.createInjector(dialogRef);
const componentPortal = new ComponentPortal(ConfirmDialogComponent, null, customInjector);
const componentRef = overlayRef.attach(componentPortal);
}
private createInjector(customOverlayRef: CustomOverlayRef) {
const injectionTokens = new WeakMap();
injectionTokens.set(CustomOverlayRef, customOverlayRef);
return new PortalInjector(this.injector, injectionTokens);
}
}
export class CustomOverlayRef {
constructor(
private overlayRef: OverlayRef,
) { }
public close() {
this.overlayRef.dispose();
}
@Component({
selector: 'app-confirm-dialog',
templateUrl: './confirm-dialog.component.html',
styleUrls: ['./confirm-dialog.component.scss']
})
export class ConfirmDialogComponent implements OnInit {
constructor(
private customDialogRef: CustomOverlayRef,
) { }
ngOnInit() {
}
public close() {
this.customDialogRef.close();
}
}
【问题讨论】:
-
请添加
ConfirmDialogComponent的相关部分。您可能已经将组件相互导入到服务中,反之亦然。但是,这不是错误,而是您当然不应该忽略的警告。与此处相同:stackoverflow.com/questions/46113734/… -
我添加了
ConfirmDialogComponent代码。由于我忘记提及的错误,它会阻止应用程序加载。
标签: angular