最近我遇到了一个测验,问题是
data='';
for(var i = 0; i < json.length; i++) {
var str1 = json[i]['link-text'];
if(i !== json.length - 1) str1 += ' / ';
data = data.concat(str1)
}
我选择b。$ delegate并且测验表明这是错误的,测验说正确答案是a.Both。
所以我想知道这是否属实,我认为装饰器在提供者内部,即他们是由提供者调用的服务,他们可以像本例中那样使用$ delegate
Decorators use
Select one:
a. Both
b. $delegate
c. None
d. $provide
另外,在decorator documentation中声明了
当需要实例化服务并且应该返回修饰的服务实例时,将调用此函数。该函数使用injector.invoke方法调用,因此可完全注入。本地注射参数:
$ delegate - 原始服务实例,可以进行猴子修补,配置,修饰或委托。
所以,我错过了什么或测验错了,或者我错了,有人可以帮我理解这一点。
答案 0 :(得分: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;
}
}