Можем ли мы получить доступ к $ обеспечить внутри декоратора в 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;
}
}