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

时间:2016-07-22 15:12:27

标签: angularjs

引用Angular developer guide

  

module.decorator

     

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

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

1 个答案:

答案 0 :(得分:1)

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) => { ... });