AngularJS和Typescript—注入其他服务的服务未定义

AngularJS和Typescript—注入其他服务的服务未定义,angularjs,dependency-injection,typescript,Angularjs,Dependency Injection,Typescript,我正在使用中概述的修改。到目前为止一切都很顺利——我试图将一个服务注入到另一个服务的构造函数中,但注入的值总是“未定义”。没有抛出错误 以下是一个简化的示例: module app.services { export class dashboardFilterService implements IService { constructor($rootScope: ng.IRootScopeService) { // $rootScope is u

我正在使用中概述的修改。到目前为止一切都很顺利——我试图将一个服务注入到另一个服务的构造函数中,但注入的值总是“未定义”。没有抛出错误

以下是一个简化的示例:

module app.services {
    export class dashboardFilterService implements IService {
        constructor($rootScope: ng.IRootScopeService) {
            // $rootScope is undefined...
            //$rootScope.$broadcast('FilterInitialized');
        }
    }
}
app.registerService('dashboardFilterService', ['$rootScope']);
将服务注入控制器工作正常。我对打字脚本和角度都很陌生,所以这对于有更多经验的人来说可能是显而易见的。以下是编译后的js供参考:

var app;
(function (app) {
    (function (services) {
        var dashboardFilterService = (function () {
            function dashboardFilterService($rootScope) {
                // $rootScope is undefined...
                //$rootScope.$broadcast('FilterInitialized');
            }
            return dashboardFilterService;
        })();
        services.dashboardFilterService = dashboardFilterService;
    })(app.services || (app.services = {}));
    var services = app.services;
})(app || (app = {}));
app.registerService('dashboardFilterService', ['$rootScope']);

我不知道typescript,但在javascript中进行依赖项注入最安全的方法是

app.service('serviceName', ['$rootScope', 'anotherServ', function($rootScope, anotherService){

}]);
我认为您没有将服务函数作为数组中的最后一个元素进行传递,因此在您的情况下,类似这样:

app.registerService('dashboardFilterService', ['$rootScope', dashboardFilterService]);
推荐模式:

module app.services {
    export class dashboardFilterService implements IService {
        static $inject = ['$rootScope']; // This should do it
        constructor($rootScope: ng.IRootScopeService) {
            //$rootScope.$broadcast('FilterInitialized');
        }
    }
    app.registerService('dashboardFilterService', dashboardFilterService );
}

PS:我做了一个关于这个主题的视频:

app.registerService助手函数实际上是以这种方式传递参数的,所以我仍然不确定为什么这个方法不起作用。下面是代码:
export function registerService(className:string,services=[]){var service=className[0].toLowerCase()+className.slice(1);services.push(()=>new app.services[className]());angular.module('app.services')。factory(service,services);}