Разница между зависимостью модуля и зависимостью службы в AngularJS

Я не понимаю, в чем разница между зависимостью модуля и зависимостью службы. Например,

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

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

Я не понимаю, почему служба Users может быть передана в метод контроллера components.users, поскольку модуль component.users не требуется. (Я думал, что модуль api.users должен быть передан в методе модуля как один из обязательных модулей).

Другими словами...

В чем разница между зависимостью модуля и зависимостью службы?

Почему служба доступна, даже если модуль, в котором она определена, не требуется?


person user1888955    schedule 03.08.2018    source источник


Ответы (3)


Вы можете проверить, используете ли вы существующую кодовую базу вашей команды, что они определили корневой или базовый модуль «приложения», который включает в себя определенную вами службу «Пользователи». Ниже приведен пример того, как это может работать в вашем проекте и почему вы можете использовать службу «Пользователи»:

<!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>
person captwebdesign    schedule 03.08.2018

Зависимость между модулями указывает, как каждому модулю (представьте, что модуль представляет собой пакет функций) нужны некоторые функции, предоставляемые другим модулем (модулями).

Зависимость от службы — это то, как что-то (контроллер, служба и т. д.) нуждается в конкретной службе для работы.

Это связано. Если контроллеру (т.е.) нужна служба, которая находится в другом модуле, здесь вы можете указать зависимость модуля и зависимости службы. Если позже упомянутая служба находится внутри того же модуля. Модуль контроллера не должен зависеть от другого модуля.

Итак, представьте себе это:

  1. ModuleA
    • Functionality1 (Service1)
    • Функциональность2 (Сервис2)
  2. ModuleB
    • Functionality3 (Service3)
    • Функциональность4 (Service4)

Если Functionality1 нужен Functionality2, он может использовать его без необходимости ModuleA импортировать ModuleB, потому что они находятся в одном модуле. Теперь, если Functionality2 требуется Functionality4, ModuleA нужно импортировать ModuleB, чтобы Functionality4 можно было перенести внутрь «области действия» (используется в общем смысле этого слова, не путать с $scope) из ModuleA.

Каждый модуль в AngularJS объявляется с помощью angular.module('name', []) (обратите внимание на скобки). И каждый модуль (после создания) можно найти с помощью angular.module('name') (обратите внимание на отсутствие скобок).

Предоставленный вами код не должен работать, так как UsersController (объявлено в модуле components.users) требует Users factory (объявлено в модуле 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 factory внутри того же модуля components.users, либо импортировать api.users модуль в components.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>

person lealceldeiro    schedule 03.08.2018

Каждый раз, когда вы делаете angular.module, он становится отдельным модулем.

Предположим, вы живете в квартире, где каждый дом представляет собой модуль. Где каждый дом будет иметь свои комнаты (услуги) и т.д.

поэтому, когда вы хотите получить доступ к комнатам чужого дома, вам нужно запросить разрешение у другого дома. в этом случае вы вводите конкретный модуль, и только тогда вы сможете получить к нему доступ.

person Sajeetharan    schedule 03.08.2018