2014-03-27 76 views
3

我正在使用this starter template以及this SO post中列出的修改。到目前爲止,它一直在順利航行 - 我試圖將服務注入到另一個服務的構造函數中,但注入的值始終是「未定義的」。沒有錯誤拋出。AngularJS和Typescript - 注入其他服務的服務未定義

下面是一個簡單的例子:

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']); 

回答

1

好吧,我不知道,但打字原稿做依賴注入的JavaScript中最安全的方式是

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

}]); 

我覺得你不流通服務功能爲數組中最後一個元素,所以你的情況,這樣的事情:

app.registerService('dashboardFilterService', ['$rootScope', dashboardFilterService]); 
+0

的app.registerService輔助函數並通過實際的論據這樣,所以我仍然不知道是什麼原因該方法沒有奏效。這裏是代碼: 'export function registerService(className:string,services = []){ var service = className [0] .toLowerCase()+ className.slice(1); services.push(()=> new app.services [className]()); ('app.services')。factory(service,services); }' – jdraper3