Angularjs $provide.decorator和module.decorator之间有什么区别?

Angularjs $provide.decorator和module.decorator之间有什么区别?,angularjs,Angularjs,引用角度 模块装饰器 此函数与$Provider.decorator函数相同,只是它是通过模块API公开的。这允许您将装饰器模式与模块配置块分离 那么基本上这里的区别是什么?是否存在一种方法优于另一种方法的情况?为什么不总是使用module.decorator?module.decorator是在1.4中作为$provide.decorator的快捷方式引入的$provide.decorator仍可以用于向后兼容 $provide方法的明显特性是函数作用域可以访问提供程序和实例: app.con

引用角度

模块装饰器

此函数与$Provider.decorator函数相同,只是它是通过模块API公开的。这允许您将装饰器模式与模块配置块分离


那么基本上这里的区别是什么?是否存在一种方法优于另一种方法的情况?为什么不总是使用module.decorator?

module.decorator
是在1.4中作为
$provide.decorator
的快捷方式引入的<代码>$provide.decorator仍可以用于向后兼容

$provide
方法的明显特性是函数作用域可以访问提供程序和实例:

app.config(($provide, $compileProvider) => {
  $provide.decorator('linkService', ($delegate) => {
    $compileProvider.aHrefSanitizationWhitelist(...);
    return $delegate;
});
$provide
方法不太明显但仍然很重要的特性是,它们会在配置阶段后影响应用程序,而模块方法不会,这就为延迟加载和其他未记录但可能有益的技术创造了可能性:

app.config(($provide) => {
  $provide.value('$provide', $provide));
});

app.run(($provide) => {
  // app.decorator('service', ...) will do nothing here
  $provide.decorator('service', ...);
});

app.run((service) => { ... });