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依赖的其他模块名称。不要将服务与模块混淆。 –