注入角度2.它是如何工作的?

Tea*_* NG 2 dependency-injection angular

我几天来一直在学习Angular 2.当我阅读Angular 2中的Injectable()概念并尝试在此链接中应用教程的示例代码时:Angular 2 - Dependency Injection,我遇到了问题.

他们说我需要将注释@Injectable()放在类的顶部,以便其他类可以注入,如:

import { 
   Injectable 
} from '@angular/core'; 

@Injectable() 
export class appService {  
   getApp(): string { 
      return "Hello world"; 
   } 
}
Run Code Online (Sandbox Code Playgroud)

问题是当我删除I​​njectable()时,我的应用程序仍能正常运行.有人可以帮我弄清楚Angular 2中的注射是如何起作用的吗?

eko*_*eko 6

正如文档中明确指出的那样:

碰巧,您可能@Injectable()已从第一个版本中省略,HeroService因为它没有注入参数.但是你现在必须拥有该服务具有注入依赖项.你需要它,因为Angular需要构造函数参数元数据才能注入Logger.

https://angular.io/guide/dependency-injection#why-injectable

简而言之,如果您的注射器具有注射器,则@Injectable装饰器会解决循环依赖性.


"Angular 2中的注射是如何起作用的?"

这是一个非常广泛的问题,但总结一下Angular注入系统会创建该提供程序对象/函数的实例,并在构造函数中将其注入该组件时使用该实例.

如果您没有在正在使用的组件中提供它,那么它将转到它的父组件,直到它找到实例之前一直使用的模块.每个级别都有自己的提供程序实例映射,组件将使用它在向上遍历注入树时找到的第一个实例.

因此,提供程序将是一个单例实例,直到定义它为止.

  • 很棒的解释,+ 1::) (2认同)