我们可以在 Angular JS 中的装饰器中访问$provide吗?



>最近我遇到了一个测验,问题是

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;
    }
}

相关内容

  • 没有找到相关文章

最新更新