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: './example.component.html',
styleUrls: ['./example.component.scss'],
providers: [UserServcie] //设置注入服务
})
export class ExampleComponent{
constructor() {}
}
在某个注入器的范围内,服务是单例的。也就是说,在指定的注入器中最多只有某个服务的最多一个实例。