DI:依赖注入,是一种设计模式,很多优秀的框架都实现了这种模式,比如spring框架。angular自身也实现了一套依赖注入,只需要把主要的服务在用到的类的构造函数注入就可以。
一般我们需要依赖注入的都是一些获取数据的服务,要让一个类成为可注入的服务就需要使用@Injectable()装饰器。
设置注入服务有三种方式,三者选其一即可
在服务本身的 @Injectable() 装饰器中。 在 NgModule 的 @NgModule() 装饰器中。 在组件的 @Component() 装饰器中。
@Injectable() 装饰器这种设置注入的方式是最常用也是用cli命令自动生成的。providedId:"root"表示在根模块中注入,在root模块的 @NgModule()中注入是一样的。
@Injectable()装饰器标记注入
@Injectable({providedIn: "root"})export class UserService(){constructor() {}getUser() {}}
@NgModule() 装饰器中标记注入
@NgModule({declarations: [AppComponent],imports: [BrowserModule,AppRoutingModule,FormsModule],providers: [UserService //设置注入服务],bootstrap: [AppComponent]})export class AppModule {}
@Component() 装饰器中标记注入
@Component({selector: 'app-example',templateUrl: './ponent.html',styleUrls: ['./ponent.scss'],providers: [UserServcie] //设置注入服务})export class ExampleComponent{constructor() {}}
在某个注入器的范围内,服务是单例的。也就是说,在指定的注入器中最多只有某个服务的最多一个实例。