模块内的角度服务

时间:2016-03-04 19:02:42

标签: angularjs dependency-injection angular-services angular-module

难以将服务注入其他服务。我想要一个服务层次结构,我可以向父服务传递/请求逻辑,以简洁和封装。

例如,我有一个userService,我希望userService管理用户的toDoList。所以我创建了一个toDoService,并且我希望控制器通过将请求传递给userService来为用户添加toDo,userService将继承到toDoService。这就是我所拥有的:

// 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并在那里移动该代码并封装它时,angular会抱怨doService。

错误:[$ injector:unpr]未知提供者:toDoServiceProvider< - toDoService< - userService

我检查了脚本引用,并且正确包含了所有脚本。例如<script src='/[..]/toDoService.js' />等......

所以我想知道甚至可以将服务注入同一模块中的另一个服务吗?这是我的命名约定的问题吗?

1 个答案:

答案 0 :(得分:1)

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

userService.js 中的这一行定义模块myApp.services,覆盖之前在toDoService.js中定义的那个。

仅定义模块一次(在单独的文件中)。使用

获取对此先前定义的模块的引用
angular.module('myApp.myServices')

即。没有空数组作为第二个参数。