angular.injector表现得不像想象的那样

时间:2015-08-18 16:02:26

标签: javascript angularjs typescript

我正在尝试使用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

我误解了喷油器的功能吗?问题是我无法创建服务实例,因为服务本身具有无法解析的依赖项?

非常感谢对此的任何帮助。

1 个答案:

答案 0 :(得分:0)

  

问题是我无法创建服务实例,因为服务本身具有无法解析的依赖项

是。具体来说,$rootElement不可用。这是一个告诉故事标志,代码在角度被引导之前执行https://docs.angularjs.org/api/ng/function/angular.bootstrap