提供者只是服务的实例。
您可以创建一次并在任何地方使用它们,也可以创建多个实例。
让我们了解如何在 Angular 中使用它们
所有服务都在 Angular 中注册,但在我们实例化它们之前它们不能被使用。所以首先,我们必须实例化服务,我们通过使用提供者来做到这一点。
有两种方法可以实例化服务。首先使用 providers 数组,第二个是使用 providedIn。
第一种方法使用Providers数组
要在全球范围内使用该服务,我们可以将提供程序放置在 AppModule 中。通过这样做,该服务的实例被创建并且应用程序中的所有组件或其他服务将使用相同的实例。
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { NewService } from './newService';
@NgModule({
declarations: [
AppComponent
],
providers: [NewService],
bootstrap: [AppComponent]
})
export class AppModule { }
要在任何特定组件中使用服务,我们可以将提供程序放在 ComponentModule 中。通过这样做,该服务的新实例被创建并且所有子组件将使用相同的实例(它将覆盖父实例)。
import { Component, OnInit } from '@angular/core';
import { NewService } from './newService';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
providers:[NewService]
})
export class AppComponent implements OnInit {
constructor(private newService: newService) { }
ngOnInit() { }
}
注意:如果您将提供程序放在 AppComponent 中,则该应用程序中的所有组件都可以使用该实例,但其他服务将无权访问该实例。要让其他服务也使用同一个实例,请将其放在 AppModule 中。
第二种方法使用providedIn
您可以使用 Injectable 装饰器来实例化任何服务。
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root' | Type<any>
})
export class UserService {
}
如果它是 root,那么整个应用程序都可以访问该服务。这意味着 Angular 会创建该服务的单个实例,而整个应用程序使用相同的实例。
如果只能在特定模块中访问它,我们可以通过为 providedIn
提供模块名称来做到这一点
@Injectable({
providedIn: AnyModule
})
使用 Injectable 装饰器实例化服务的另一个优点是,如果该服务根本没有在该应用程序的任何地方使用,那么它就不会出现在已编译的 Angular 应用程序中。