我正在尝试使用angular.injector作为服务定位器来检索从中派生出许多控制器的基类中的服务。我之所以这样做,是因为我不想修改几十个控制器的构造函数签名,以便获取我的服务实例。我非常乐意牺牲这样的流氓服务,以避免在我的控制器上进行大量冒险工作。
我的基本控制器如下所示:
module Controllers {
"use strict";
export class MyBaseController {
static $inject = ["$q"];
protected qService: angular.IQService;
private myService: Services.MyService;
constructor($q: angular.IQService) {
this.qService = $q;
// falls over on this next line
this.myService = angular.injector(["myApp"]).get("MyService");
}
protected myBehaviour(details: any) {
this.myService.myServiceMethod(details);
}
}
}
我的服务如下:
module Services {
"use strict";
export class MyService {
static $inject = ["$modal"];
private modal;
private modalInstance;
constructor($modal) {
this.modal = $modal;
}
public myServiceMethod() {
// do something with $modal
}
}
}
我的控制器中的行上的错误如下所示:
Error: [$injector:unpr] Unknown provider: $rootElementProvider <- $rootElement <- $animate <- $compile <- $modalStack <- $modal <- ApplicationErrorService
我误解了喷油器的功能吗?问题是我无法创建服务实例,因为服务本身具有无法解析的依赖项?
非常感谢对此的任何帮助。
答案 0 :(得分:0)
问题是我无法创建服务实例,因为服务本身具有无法解析的依赖项
是。具体来说,$rootElement
不可用。这是一个告诉故事标志,代码在角度被引导之前执行:https://docs.angularjs.org/api/ng/function/angular.bootstrap