Можем ли мы получить доступ к $ обеспечить внутри декоратора в Angular JS?

Недавно я наткнулся на викторину, и вопрос

Decorators use 

Select one:
a. Both
b. $delegate
c. None
d. $provide

Я выбираю b. $ Делегат, и тест говорит, что это неправильно, и тест говорит, что правильный ответ - а.

Так что мне было интересно, если это правда, я думал, что декораторы находятся внутри провайдера, т.е. они являются сервисом, который вызывается провайдером, и они могут использовать $ делегат, как в этом примере

 app.config(function ($provide) {
  $provide.decorator('movieTitle', function ($delegate) {
    return $delegate + ' - starring Keanu Reeves';
  });
});

также в документации декоратора говорится, что

Эта функция будет вызываться, когда необходимо создать экземпляр службы, и должна возвращать оформленный экземпляр службы. Функция вызывается с использованием метода injector.invoke и поэтому является полностью инъекционной. Аргументы локального внедрения:

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

Итак, я что-то упустил или тест не так, или я не прав, может кто-нибудь, пожалуйста, помогите мне понять это.

1 ответ

Решение

Да, правильный ответ - оба. В качестве примера это фрагмент кода, где установлен декоратор для $log сервис с использованием индивидуального сервиса logEnchance добавить пользовательский функционал. В этом случае logEnchance делать посты во внешнем журнале сервиса.

angular.module('angularApp').config(configureLogger);

// The decorator allows us to inject custom behaviors
function configureLogger($provide) {

    // registers a value/object that can be accessed by providers and services
    $provide.constant('logDecorator', logDecorator);

    // registers a decorator function
    // $provide.decorator intercept $log service letting us add custom functionality
    $provide.decorator('$log', logDecorator);

    // inject dependencies into logDecorator function
    logDecorator.$inject = ['$delegate', 'logEnchance'];

    function logDecorator($delegate, logEnchance) {
        // logEnchance is the service who modify the $log service
        logEnchance( $delegate );
        return $delegate;
    }
}
Другие вопросы по тегам