AngularJS中模块依赖和服务依赖的区别

AngularJS中模块依赖和服务依赖的区别,angularjs,dependency-injection,angularjs-module,angularjs-injector,Angularjs,Dependency Injection,Angularjs Module,Angularjs Injector,我不明白模块依赖和服务依赖之间有什么区别。比如说, angular.module('components.users', []) .controller('UsersController', function(Users) { //... }) angular.module('api.users', []) .factory('Users', function() { //... }); 我不明白为什么组件的控制器方法中可以传递用户服务。用户,因

我不明白模块依赖和服务依赖之间有什么区别。比如说,

angular.module('components.users', [])
    .controller('UsersController', function(Users) {
        //...
}) 

angular.module('api.users', [])
  .factory('Users', function() {
        //...
});
我不明白为什么
组件的控制器方法中可以传递
用户
服务。用户
,因为
组件不需要模块。用户
模块。(我认为
api.users
module应该作为必需的模块之一在module方法中传递)

换句话说

模块依赖和服务依赖之间有什么区别


为什么即使定义的模块不是必需的,服务仍然可用?

模块之间的依赖关系指定每个模块(假设一个模块是一个功能包)如何需要其他模块提供的某些功能

服务依赖性是指某些东西(控制器、服务等)需要特定服务才能工作的方式

这些都是相关的。如果一个控制器(即)需要另一个模块中的服务,这里您可以证明模块依赖性和服务依赖性。如果后面提到的服务位于同一模块内。控制器的模块不必依赖于其他模块

想象一下:

    • 功能1(服务1)
    • 功能2(服务2)
  • 模B
    • 功能3(服务3)
    • 功能4(服务4)
  • 如果
    功能1
    需要
    功能2
    ,则无需导入
    模块a
    即可使用,因为它们位于同一模块中。现在,如果
    functionaty2
    需要
    functionaty4
    ModuleA
    需要导入
    ModuleB
    ,那么
    functionaty4
    可以被纳入
    ModuleA
    的“范围”(用作一般意义,不要混淆)

    AngularJS中的每个模块都是使用
    angular.module('name',[])
    声明的(注意括号)。每个模块(一旦创建)都可以使用
    angular.module('name')
    定位(注意没有括号)

    您提供的代码不应工作,因为
    用户控制器
    (在
    组件.用户
    模块中声明)需要
    用户
    工厂(在
    api.用户
    模块中声明)和
    组件。用户
    模块不导入
    api.用户

    见下文(代码显然失败)

    angular.module('components.users',[])
    .controller('UsersController',函数(用户){
    console.log(用户);
    })
    angular.module('api.users',[])
    .factory('用户',函数()){
    归还这个;
    });
    
    每次执行
    角度模块时,它都会成为一个单独的模块

    假设你住在一套公寓里,每栋房子都是一个单元。每栋房子都有自己的房间(服务设施)等


    所以,当你想进入别人家的房间时,你需要获得其他房子的许可。在这种情况下,您正在注入特定模块,然后只有您才能访问该模块。

    您可以检查您是否正在使用团队的现有代码库,他们是否定义了包含您定义的“用户”服务的根或基“应用”模块。下面是一个示例,说明了这在您的项目中是如何工作的,以及您为什么能够使用“用户”服务:

    <!DOCTYPE html>
    <html ng-app="app">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <div ng-controller="controller">
            {{ text }}
        </div>
        <script src="angular.js"></script>
        <script type="text/javascript">
        angular.module('services',[])
            .factory('service',function(){
                return {
                    text: "this is a string value defined in a service."
                }
            })
        ;
        angular.module('controllers',[])
            /*
              Here the service "service" is being used however
              has not been specified in it's containing module.
            */
            .controller('controller',function($scope,service){
                $scope.text = service.text;
            });
        ;
        /*
          The above works because in some way all services and controllers
          have been defined. In this example by manually specifying each.
        */
        angular.module('app',['services','controllers']);
        </script>
    </body>
    </html>
    
    
    {{text}}
    角度。模块('services',[])
    .factory('服务',函数()){
    返回{
    text:“这是在服务中定义的字符串值。”
    }
    })
    ;
    角度模块('控制器',[]))
    /*
    然而,这里使用的是服务“service”
    尚未在其包含模块中指定。
    */
    .controller('controller',函数($scope,service){
    $scope.text=service.text;
    });
    ;
    /*
    上述方法之所以有效,是因为在某种程度上,所有服务和控制器
    已经定义了。在本例中,通过手动指定每个。
    */
    模块('app',['services','controllers']);