Поиск…


Синтаксис

  • константа (имя, значение);
  • значение (имя, значение);
  • завод (имя, $ getFn);
  • сервис (имя, конструктор);
  • поставщик (имя, поставщик);

замечания

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

  • постоянная
  • Значение
  • завод
  • обслуживание
  • поставщик

Службы, фабрики и поставщики все ленивы инициализированы, компонент инициализируется, только если приложение зависит от него.

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

постоянная

Constant доступна как в конфигурации, так и в фазах запуска.

angular.module('app',[])
  .constant('endpoint', 'http://some.rest.endpoint') // define
  .config(function(endpoint) {
    // do something with endpoint
    // available in both config- and run phases
  }) 
  .controller('MainCtrl', function(endpoint) {       // inject
    var vm = this;
    vm.endpoint = endpoint;                          // usage
  });

<body ng-controller="MainCtrl as vm">
  <div>endpoint = {{ ::vm.endpoint }}</div>
</body>

endpoint = http: //some.rest.endpoint

Значение

Value доступно как на этапах конфигурации, так и на этапе запуска.

angular.module('app',[])
  .value('endpoint', 'http://some.rest.endpoint') // define
  .run(function(endpoint) {
    // do something with endpoint
    // only available in run phase
  }) 
  .controller('MainCtrl', function(endpoint) {    // inject
    var vm = this;
    vm.endpoint = endpoint;                       // usage
  }); 

<body ng-controller="MainCtrl as vm">
  <div>endpoint = {{ ::vm.endpoint }}</div>
</body>

endpoint = http: //some.rest.endpoint

завод

Factory доступна в фазе запуска.

Рецепт Factory создает новую службу, используя функцию с нулевым или большим аргументом (это зависимости от других сервисов). Возвращаемое значение этой функции является экземпляром службы, созданным этим рецептом.

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

angular.module('app',[])
  .factory('endpointFactory', function() {
    return {
      get: function() {
        return 'http://some.rest.endpoint';
      }
    };
  })
  .controller('MainCtrl', function(endpointFactory) {
    var vm = this;
    vm.endpoint = endpointFactory.get();
  });

<body ng-controller="MainCtrl as vm">
  <div>endpoint = {{::vm.endpoint }}</div>
</body>

endpoint = http: //some.rest.endpoint

обслуживание

Service доступна на этапе запуска.

Рецепт службы создает сервис, аналогичный рецептам Value или Factory, но он делает это, вызывая конструктор с новым оператором . Конструктор может принимать ноль или более аргументов, которые представляют зависимости, необходимые экземпляру этого типа.

angular.module('app',[])
  .service('endpointService', function() {
    this.get = function() {
      return 'http://some.rest.endpoint';
    };
  })
  .controller('MainCtrl', function(endpointService) {
    var vm = this;
    vm.endpoint = endpointService.get();
  });

<body ng-controller="MainCtrl as vm">
  <div>endpoint = {{::vm.endpoint }}</div>
</body>

endpoint = http: //some.rest.endpoint

поставщик

Provider доступен как в конфигурации, так и в фазах запуска.

Рецепт поставщика синтаксически определяется как настраиваемый тип, реализующий метод $get .

Вы должны использовать рецепт поставщика только тогда, когда вы хотите открыть API для всей конфигурации приложения, которая должна быть выполнена до запуска приложения. Обычно это интересно только для многоразовых сервисов, поведение которых может немного меняться между приложениями.

angular.module('app',[])
  .provider('endpointProvider', function() {
    var uri = 'n/a';
    
    this.set = function(value) {
      uri = value;
    };

    this.$get = function() {
      return {
        get: function() {
          return uri;
        }
      };
    };
  })
  .config(function(endpointProviderProvider) {
    endpointProviderProvider.set('http://some.rest.endpoint');
  })   
  .controller('MainCtrl', function(endpointProvider) {
    var vm = this;
    vm.endpoint = endpointProvider.get();
  }); 

<body ng-controller="MainCtrl as vm">
  <div>endpoint = {{::vm.endpoint }}</div>
</body>

endpoint = http: //some.rest.endpoint

Без config фаза результат был бы

endpoint = n / a



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow