FORMA

依赖注入

依赖注入(DI) 是 Angular 的核心:由框架创建并注入服务(Service)实例,便于测试与解耦。见 Angular 基础

定义与注入服务

ts
import { Injectable } from "@angular/core";

@Injectable({ providedIn: "root" })
export class UserService {
  getUsers() {
    return fetch("/api/users").then((r) => r.json());
  }
}
ts
import { Component, inject } from "@angular/core";
import { UserService } from "./user.service";

@Component({
  selector: "app-user-list",
  standalone: true,
  template: `...`,
})
export class UserListComponent {
  private userService = inject(UserService);
  // 或构造函数:constructor(private userService: UserService) {}
}

providedIn: 'root' 表示应用级单例(树摇友好,未使用可不打包)。

提供者作用域

配置作用
providedIn: 'root'全应用单例
组件 providers: [MyService]每个组件实例一份
bootstrapApplication / 路由的 providers模块级或路由级

子组件注入时,最近的 provider 优先。

函数式提供者

ts
bootstrapApplication(AppComponent, {
  providers: [
    { provide: API_URL, useValue: "https://api.example.com" },
    { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
  ],
});

InjectionToken 用于注入非类类型(字符串、配置对象)。

测试

在单元测试中可用 TestBed.configureTestingModule 覆盖 provider:

ts
TestBed.configureTestingModule({
  providers: [{ provide: UserService, useValue: mockUserService }],
});

测试

参考文献

以下链接在编写时均可正常访问:

资料说明
依赖注入官方指南
inject()函数式注入
InjectionToken令牌

Series

angular

5 / 14