Вызов $provide внешней конфигурации. Угловой

Я знаю, что невозможно вызвать $provide вне блока конфигурации. Есть ли какой-нибудь трюк, чтобы внедрить $provide в службу, вызывающую ее в $provide.decorator?

angular.module('app', [])
  .config(function($provide){
    $provide.decorator('myService', function($delegate){
      //inject the $provide into myService through $delegate
      return $delegate;
    }
  })


person Miguel Lattuada    schedule 02.09.2015    source источник
comment
а зачем вам $provide в вашем сервисе?   -  person dfsq    schedule 02.09.2015
comment
Это то же самое, что и ввод в качестве параметра, но с меньшей абстракцией.   -  person Miguel Lattuada    schedule 02.09.2015
comment
Шаблон декоратора повторного использования, реализованный angular.   -  person Miguel Lattuada    schedule 02.09.2015
comment
@MiguelL Обратите внимание, что $provide.decorator вступает в силу только в том случае, если он зарегистрирован до создания экземпляра декорированной службы (т. Е. Внедрения в первый раз).   -  person Estus Flask    schedule 03.09.2015


Ответы (1)


$provide особенный, потому что он определен внутри Angular, его можно найти с помощью инжектора среди поставщиков услуг (поэтому он доступен в config), но не среди экземпляры службы.

Это можно легко исправить с помощью

angular.module('app', []).config(function ($provide) {
  $provide.value('$provide', $provide);
});

Но таким образом компоненты могут быть легко определены несвоевременно.

person Estus Flask    schedule 02.09.2015