CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Angular 核心/课时/服务与依赖注入
RawBlame
课时目录12 节

Angular 核心

  1. 01Angular 是什么
  2. 02CLI 与项目结构
  3. 03组件与模板
  4. 04指令
  5. 05服务与依赖注入
  6. 06HttpClient
  7. 07Router
  8. 08表单
  9. 09RxJS 入门
  10. 10Signals 新特性
  11. 11Angular vs React/Vue
  12. 12综合练习

服务与依赖注入

inject()、providedIn root、单例服务。

35 分钟

服务与依赖注入

Angular 依赖注入(DI) 是框架核心:业务逻辑放在 Service,组件通过构造函数或 inject() 获取实例。对比 React 核心 需自行 Context/第三方库,Vue 3 核心 的 provide/inject 概念相近但 Angular DI 更系统化。

学习目标

  • 创建 @Injectable 服务
  • 使用 inject() 与 providedIn: 'root'
  • 理解单例作用域与测试替换

核心内容

定义服务

import { Injectable, inject } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs";

export interface Track {
  slug: string;
  title: string;
}

@Injectable({ providedIn: "root" })
export class TrackService {
  private http = inject(HttpClient);
  private base = "/api/tracks";

  list(): Observable<Track[]> {
    return this.http.get<Track[]>(this.base);
  }

  getBySlug(slug: string): Observable<Track> {
    return this.http.get<Track>(`${this.base}/${slug}`);
  }
}

providedIn: 'root' 表示应用级 单例,全组件共享同一实例。

组件注入

@Component({
  selector: "app-track-page",
  standalone: true,
  template: `<ul>@for (t of tracks; track t.slug) { <li>{{ t.title }}</li> }</ul>`,
})
export class TrackPageComponent implements OnInit {
  private trackService = inject(TrackService);
  tracks: Track[] = [];

  ngOnInit() {
    this.trackService.list().subscribe((data) => (this.tracks = data));
  }
}

也可写 constructor(private trackService: TrackService) {}。Service 放 API 与权限逻辑,与 Spring Boot 分层一致;类型见 TypeScript 核心。

练习

  • ng generate service track 并实现 list()
  • 在组件用 inject(TrackService) 替换直接 fetch

小结

Service 承载逻辑,DI 解耦组件与依赖。 下一课 HttpClient。

加载本节练习…
← 上一课
指令
下一课 →HttpClient