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);}