0

難以向其他服務注入服務。爲了簡潔和封裝,我想要一個服務層次結構,我可以向/從父服務傳遞/請求邏輯。模塊內的角度服務

因此,例如,我有一個userService,並且我想讓userService管理用戶的toDoList。所以我創建了一個toDoService,並且我希望控制器通過將請求傳遞給userService來繼承toDoService,從而爲用戶添加一個toDo。下面是我有:

// app.js 
angular.module('myApp', [ 
    // other dependencies... 
    'myApp.myServices' 
]); 

// services/toDoService.js 
angular.module('myApp.myServices', []) 
     .factory('toDoService', function($http) { 

      getStuff = function(userId) { 
       // returns $http call 
      }; 

      addStuff = function(userId, data) { 
       // returns $http call 
      }; 
}); 

// services/userService.js 
angular.module('myApp.myServices', []) 
     .factory('userService', 
     ['$http', 'toDoService', function(
      $http, toDoService) { 

      addToDo = function(data) { 
       toDoService.addStuff(user.uid, data) 
        .then(function(success) { 
         // apply bindings 
        }) 
        .catch(function(error) { 
         // display error 
        }); 
      }; 

      getToDos = function(data) { 
       toDoService.getStuff(user.uid) 
        .then(function(success) { 
         // apply bindings 
        }) 
        .catch(function(error) { 
         // display error 
        }); 
      }; 
}]); 

控制器的工作原理用戶與UserService,並從toDoService代碼工作時,它最初是在userService。但是,當我創建toDoService並將代碼移動並封裝它時,角度抱怨toDoService。

錯誤:[$注射器:unpr]未知提供商:toDoServiceProvider < - toDoService < - userService

我檢查腳本引用,並且所有的腳本都正確包括在內。例如<script src='/[..]/toDoService.js' />等...

所以我想知道是否有可能將服務注入同一模塊內的其他服務?我的命名約定是否是一個問題?

回答

1
angular.module('myApp.myServices', []) 

這條線在userService.js 限定模塊myApp.services,並覆蓋先前已經在toDoService.js定義的一個。

只定義模塊一次(在單獨的文件中)。獲取對此先前定義的模塊的參考使用

angular.module('myApp.myServices') 

即沒有空數組作爲第二個參數。

+0

好的,我將創建一個單獨的文件'/ services/myService.js',並且我需要引用服務在聲明中引入模塊嗎?例如'angular.module('myApp.myServices',['userService','toDoService'])'? – kmunky

+1

不可以。您只需使用'angular.module('myApp.myServices',[])''定義它。數組中的內容不屬於該模塊的服務。這是myApp.services依賴的其他模塊名稱。不要將服務與模塊混淆。 –