>最近我遇到了一个测验,问题是
Decorators use
Select one:
a. Both
b. $delegate
c. None
d. $provide
我选择b.$delegate,测验说这是错误的,测验说正确答案是a.Both。
所以我想知道这是否属实,我认为装饰器在提供者内部,即它们是由提供者调用的服务,他们可以使用$delegate,就像在这个例子中一样
app.config(function ($provide) {
$provide.decorator('movieTitle', function ($delegate) {
return $delegate + ' - starring Keanu Reeves';
});
});
此外,在装饰器文档中,它指出
那么,我当需要实例化服务并应返回修饰的服务实例时,将调用此函数。该函数使用 injector.invoke 方法调用,因此是完全可注入的。本地注入参数:
$delegate - 原始服务实例,可以对其进行猴子修补、配置、修饰或委派。
错过了什么还是测验错了,或者我错了,有人可以帮我理解这一点吗?
是的,正确的答案是两者兼而有之。例如,这是一段代码,其中使用自定义服务logEnchance
为$log
服务设置装饰器以添加自定义功能。在这种情况下,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;
}
}