为了让角度2+中的服务正确地injected,],它需要被提供给组件、父模块或应用程序模块。应用程序模块中提供的服务将在任何地方提供相同的实例。下面是一个组件中提供的两个服务的示例:
组件:app.Component.ts
1import { Component } from '@angular/core';
2import { WeatherApiService } from './weather-api.service';
3import { AuthService } from './auth.service';
4
5@Component({
6 ...,
7 providers: [WeatherApiService, AuthService]
8})
9export class AppComponent {
10 constructor(public weatherApi: WeatherApiService,
11 public auth: AuthService) {}
这里,它们是在模块中提供的:
模块:app.mode.ts
1...
2
3import { WeatherApiService } from './weather-api.service';
4import { AuthService } from './auth.service';
类提供者
默认情况下,ANGLE将注入具有相同类名和令牌的提供程序,但useClass允许使用不同的类。例如,以下代码将提供具有AUTH令牌但UserAuth类的服务:
1providers: [{ provide: Auth, useClass: UserAuth }]
别名提供程序
如果您希望为旧提供程序设置别名,以便由新提供程序处理,则可以使用useExisting来实现。例如,如果组件仍需要使用旧提供程序,但逻辑仍应由新提供程序处理时,这将非常有用:
1providers: [{ provide: OldService, useExisting: NewService }]
价值提供者
大多数情况下,类用作提供程序,但也可以将简单值与useValue一起使用:
1const AUTH_CONFIG = {
2 apiKey: "...",
3 authDomain: "..."
4};