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)
问题是当我删除Injectable()时,我的应用程序仍能正常运行.有人可以帮我弄清楚Angular 2中的注射是如何起作用的吗?
正如文档中明确指出的那样:
碰巧,您可能
@Injectable()已从第一个版本中省略,HeroService因为它没有注入参数.但是你现在必须拥有该服务具有注入依赖项.你需要它,因为Angular需要构造函数参数元数据才能注入Logger.
https://angular.io/guide/dependency-injection#why-injectable
简而言之,如果您的注射器具有注射器,则@Injectable装饰器会解决循环依赖性.
这是一个非常广泛的问题,但总结一下Angular注入系统会创建该提供程序对象/函数的实例,并在构造函数中将其注入该组件时使用该实例.
如果您没有在正在使用的组件中提供它,那么它将转到它的父组件,直到它找到实例之前一直使用的模块.每个级别都有自己的提供程序实例映射,组件将使用它在向上遍历注入树时找到的第一个实例.
因此,提供程序将是一个单例实例,直到定义它为止.