1

我不明白模块依赖和服务依赖有什么区别。例如,

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

angular.module('api.users', [])
  .factory('Users', function() {
        //...
});

我不明白为什么Users可以在控制器方法中传递服务,components.users因为模块不需要component.users模块。(我认为api.users模块应该在模块方法中作为必需模块之一传入)。

换句话说...

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

为什么即使不需要定义的模块也可以使用服务?

4

3 回答 3

1

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

<!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>
于 2018-08-03T20:36:03.097 回答
1

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

服务依赖是某事物(控制器、服务等)需要特定服务才能工作的方式。

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

所以想象一下:

  1. 模块A
    • 功能1(服务1
    • 功能2(服务2
  2. 模块B
    • 功能3(服务3
    • 功能4(服务4

如果Functionality1需要Functionality2,它可以使用它而ModuleA无需导入ModuleB,因为它们在同一个模块中。现在如果Functionality2需要Functionality4ModuleA需要导入,ModuleB所以Functionality4可以带入$scope.ModuleA

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

您提供的代码不应该工作,因为UsersController(在components.users模块中声明)需要Users工厂(在api.users模块中声明)并且components.users模块不导入api.users

在下面看到它(代码显然失败了)

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

angular.module('api.users', [])
  .factory('Users', function() {
    return this;
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<span ng-app="components.users" ng-controller="UsersController"></span>

为了使它工作,您可以Users在同一components.users模块内声明工厂或api.userscomponents.users.

选项1:Users在同一components.users模块内声明。

// create the module
angular.module('components.users', [])
  .controller('UsersController', function(Users) {
    console.log(Users);
  })

// locate the module
angular.module('components.users')
  .factory('Users', function() {
    return this
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<span ng-app="components.users" ng-controller="UsersController"></span>

选项2:在里面导入api.users模块components.users

 
// create the module with a dependency to `api.users`
angular.module('components.users', ['api.users'])
  .controller('UsersController', function(Users) {
    console.log(Users);
  })

// create an independent module `api.users`
angular.module('api.users', [])
  .factory('Users', function() {
    return this
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<span ng-app="components.users" ng-controller="UsersController"></span>

于 2018-08-03T19:13:22.213 回答
0

每次你这样做时,angular.module它都会成为一个单独的模块。

假设你住在公寓里,每间房子都是一个模块。每个房子都有自己的房间(服务)等。

所以当你想访问别人家的房间时,你需要请求其他家的许可。在这种情况下,您将注入特定模块,然后只有您能够访问它。

于 2018-08-03T19:14:36.323 回答