Angular2 - 注入@Injectable

Rad*_*nov 4 javascript injectable typescript angular

我有一个Angular2应用程序,service用于从API获取数据.在这个例子之后,我想创建一个单独的文件,其中应该包含一些配置数据.我的问题是我的服务有一个@Injectable()装饰器,我不确定我是否可以provide在元数据中传递一个数组,我将在其中注入配置,如教程中所示.有人遇到过这样的问题,欢迎分享他的解决方案:)

Thi*_*ier 5

实际上,Angular2利用分层喷射器和喷射器链接到组件.简而言之,您只能在组件(providers属性)或应用程序级别(bootstrap功能)上定义提供程序.

关于服务,他们将能够使用对发起呼叫的组件可见的提供者,但是您无法在其级别定义提供者.

这是一个示例:

Application
     |
AppComponent
     |
ChildComponent
  getData()     --- Service1 --- Service2
Run Code Online (Sandbox Code Playgroud)

在这种应用中,我们有三个注射器:

  • 可以使用bootstrap函数的第二个参数配置的应用程序注入器
  • AppComponent可以使用providers此组件的属性配置的注入器.它可以"看到"应用程序注入器中定义的元素.这意味着如果在此提供程序中找不到提供程序,它将自动查找此父注入程序.如果在后者中找不到,则会抛出"找不到提供者"错误.
  • ChildComponent将遵循比相同的规则喷油器AppComponent之一.要注入为组件执行的注入链中涉及的元素,将首先在此注入器中查找提供者,然后在AppComponent一个注册器中查找提供者,最后在应用程序中查找提供者.

这意味着当尝试将注入Service1ChildComponent构造函数中时,Angular2将查看注入ChildComponent器,然后进入注册器,AppComponent最后进入应用程序.

由于Service2需要注入Service1,因此将执行相同的分辨率处理:ChildComponent注入器,AppComponent一个和应用程序.

这意味着,Service1Service2根据使用您的需要可以在每个级别中指定providers为组件属性和的第二参数bootstrap为应用注射器功能.

这个答案可以帮助你:

  • 当然,关于Angular 2中DI功能的另一个很好的参考资料可以在这里找到:http://blog.thoughtram.io/angular/2015/05/18/dependency-injection-in-angular-2.html (2认同)