我有一个使用DialogService
'aurelia-dialog'实例的类来打开我的Aurelia应用程序中的几乎每个对话框。以非常抽象的方式,该类如下所示:
export class DialogTrigger{
triggerDialogA() {...}
triggerDialogB() {...}
triggerDialogC() {...}
}
一切正常,直到我尝试注入DialogTrigger
其中一个对话框。
因此,假设我要创建一个新对话框DialogD。我只是简单地添加了另一种方法triggerDialogD()
,DialogTrigger
即使用DialodD
视图模型打开一个新对话框,一切正常。但是,如果我希望我的新对话框也通过使用DialogTrigger
一切崩溃的实例来触发其他对话框之一(A,B或C)。
如果我注入DialogTrigger
到DialogD
我总是得到一个错误:
键/值不能为null或未定义。您是否要注入/注册DI不存在的内容?
如果删除依赖项,对话框将起作用。
TL; DR我有一个DialogTrigger
打开aurelia-dialog
s的类。当我注入DialogTrigger
由它实例化的任何对话框时,DI都会失败。
有任何想法吗?
听起来像是循环依赖问题。
您将必须使用路径字符串来引用其中的对话框DialogTrigger
。你不能导入Dialog
到DialogTrigger
,然后也输入DialogTrigger
到Dialog
。
这将工作:
import { DialogService } from 'aurelia-dialog';
export class DialogTrigger {
static inject = [DialogService];
constructor(dialogService) {
this._dialogService = dialogService;
}
openDialogA() { this._dialogService.open({ viewModel: './prompt' }); }
openDialogB() { this._dialogService.open({ viewModel: './prompt' }); }
}
这将不起作用:
import { DialogService } from 'aurelia-dialog';
import { Prompt } from './prompt';
export class DialogTrigger {
static inject = [DialogService];
constructor(dialogService) {
this._dialogService = dialogService;
}
openDialogA() { this._dialogService.open({ viewModel: Prompt }); }
openDialogB() { this._dialogService.open({ viewModel: Prompt }); }
}
另一种选择是将引用传递给DialogTrigger
在open()
函数的model: {}
参数。像这样:
this._dialogService.open({ viewModel: './prompt', model: { dialogTrigger: this } });
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句