什么是Angular中的viewproviders? b / w提供商与viewproviders有什么区别?

时间:2016-03-09 10:05:02

标签: angular

以下代码中的viewProviders是什么?它与提供商有何不同?

class Greeter {
   greet(name:string) {
     return 'Hello ' + name + '!';
   }
}    
@Component({
  selector: 'greet',
  viewProviders: [
    Greeter
  ],
  template: `<needs-greeter></needs-greeter>`    
})
class HelloWorld {
}

2 个答案:

答案 0 :(得分:57)

在您的示例中,provider和viewProviders之间没有区别,因为HelloWorld的模板不使用<ng-content>。如果您在<ng-content>...</ng-content>内预测内容,则Greeter无法注入预计的内容,因为您正在使用

viewProviders: [Greeter] 

如果您希望Greeter可能被注入到预计的内容中,您可以使用

providers: [Greeter]

因此viewProviders将提供者限制为除预计内容之外的其他子级,而providers允许所有子级使用提供者。值viewProviders允许您阻止预计的内容弄乱您的服务,这在图书馆中尤其有用。

答案 1 :(得分:3)

  1. 如果我们要在整个应用程序中共享一个服务实例,则可以在NgModule的提供程序中对其进行配置。
  2. 如果我们希望每个组件具有一个服务实例,并与所有组件的子代共享,则可以在组件装饰器的providers属性上对其进行配置。孩子是一个观点的孩子。
  3. 如果我们希望每个组件具有一个服务实例,并且仅与组件的视图子项而不与组件的内容子项共享,则可以在组件装饰器的viewProviders属性上对其进行配置。