Angular 2 教程(一文讲透)

什么是 Angular 2 教程?为什么它值得你花时间学习

如果你正在学习前端开发,或者想从传统的 HTML + JavaScript 项目中跳脱出来,构建更复杂的单页应用(SPA),那么 Angular 2 教程 就是你迈出的第一步。不同于早期的 jQuery 时代,现代前端框架已经进化到可以管理整个应用的状态、路由、数据绑定和组件通信。

Angular 2 是由 Google 推出的革命性前端框架,它在 2016 年发布,带来了从零开始的架构重构。它不再只是一个“库”,而是一个完整的“平台”——包括 CLI 工具、模块系统、依赖注入、声明式模板、TypeScript 支持等。

你可以把 Angular 2 想象成一座现代化的“智能城市”:每个组件是独立的建筑,数据是流动的交通,而模板则是建筑的蓝图。整个城市通过一个中央调度系统(Angular 引擎)协调运作。这不仅提高了开发效率,也让代码更易维护。

对于初学者来说,Angular 2 的学习曲线确实存在,但一旦掌握核心概念,你会发现它带来的结构化思维远超传统开发方式。本篇 Angular 2 教程 就带你从零开始,一步步搭建一个真实可用的待办事项应用。


安装开发环境:搭建你的 Angular 2 工作台

在动手写代码之前,你需要准备一个干净的开发环境。这里我们使用 Node.js 和 npm(Node 包管理器)作为基础。

第一步:安装 Node.js 与 npm

确保你的系统已经安装了 Node.js 8.0 或以上版本。你可以通过终端运行以下命令检查版本:

node -v
npm -v

如果未安装,请前往 https://nodejs.org 下载 LTS 版本(推荐)。

第二步:安装 Angular CLI 工具

Angular CLI(Command Line Interface)是官方提供的命令行工具,它能帮你快速创建项目、生成组件、运行开发服务器等。

运行以下命令全局安装 Angular CLI:

npm install -g @angular/cli

注:-g 表示全局安装,安装完成后你就可以在任何目录下使用 ng 命令。

第三步:创建第一个 Angular 项目

使用 CLI 创建项目非常简单,只需一条命令:

ng new my-first-angular-app

系统会提示你是否添加路由(Routing)和选择 CSS 预处理器(建议选 CSS)。我们选择“Y”和“CSS”。

等待几分钟,项目结构就生成好了。进入项目目录:

cd my-first-angular-app

启动开发服务器:

ng serve

打开浏览器访问 http://localhost:4200 ,你应该能看到默认的欢迎页面。

✅ 小贴士:ng serve 会自动监听文件变化,修改代码后页面会热更新,无需手动刷新。


项目结构解析:理解 Angular 2 的“骨骼”

一个标准的 Angular 2 项目结构就像一座房子的蓝图。让我们从 src/app/ 目录开始,拆解它的组成部分。

src/
├── app/
│   ├── app.component.ts        # 根组件(主界面)
│   ├── app.component.html      # 组件模板
│   ├── app.component.css       # 组件样式
│   ├── app.component.spec.ts   # 测试文件
│   └── app.module.ts           # 模块配置文件
├── index.html                  # 入口 HTML
├── styles.css                  # 全局样式
└── main.ts                     # 应用入口

核心概念:组件(Component)

组件是 Angular 2 的基本构建单元,它由三部分组成:

  • 模板(Template):HTML 结构,定义界面显示
  • 类(Class):TypeScript 代码,处理逻辑
  • 元数据(Metadata):通过 @Component 装饰器定义组件的配置

我们来看一个最简单的组件示例:

// src/app/app.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',        // HTML 标签名,用于在模板中使用
  templateUrl: './app.component.html', // 模板文件路径
  styleUrls: ['./app.component.css']   // 样式文件路径
})
export class AppComponent {
  title = '我的第一个 Angular 2 应用';  // 定义一个变量,用于模板中显示
}

注:@Component 是装饰器,它告诉 Angular 这是一个组件。selector 是自定义 HTML 标签名,templateUrl 指定模板文件,styleUrls 指定样式。


构建待办事项应用:从零实现功能

接下来,我们用 Angular 2 实现一个简单的待办事项功能。目标是:添加任务、查看任务列表、标记完成。

创建任务模型(Model)

首先,定义一个任务类。这相当于为“待办事项”建立一个数据结构。

// src/app/task.model.ts
export class Task {
  // 任务的唯一标识(可选,用于后续删除)
  id: number;
  // 任务名称
  name: string;
  // 是否已完成
  isCompleted: boolean;

  // 构造函数:初始化任务数据
  constructor(name: string, id: number = Date.now()) {
    this.name = name;
    this.id = id;
    this.isCompleted = false;
  }
}

注:Date.now() 生成当前时间戳,作为唯一 ID,适合演示用途。


创建待办组件(Todo Component)

现在创建一个专门处理待办事项的组件。

ng generate component todo

这会自动创建 todo.component.tstodo.component.html 等文件。

编辑 todo.component.ts

// src/app/todo/todo.component.ts
import { Component } from '@angular/core';
import { Task } from '../task.model'; // 导入任务模型

@Component({
  selector: 'app-todo',           // 自定义标签 <app-todo>
  templateUrl: './todo.component.html', // 模板文件
  styleUrls: ['./todo.component.css']   // 样式文件
})
export class TodoComponent {
  // 存储任务列表,初始为空数组
  tasks: Task[] = [];

  // 用于输入新任务的文本框内容
  newTaskName: string = '';

  // 添加新任务的方法
  addTask(): void {
    // 如果输入为空,不添加
    if (!this.newTaskName.trim()) return;

    // 创建新任务对象并添加到列表
    const newTask = new Task(this.newTaskName);
    this.tasks.push(newTask);

    // 清空输入框
    this.newTaskName = '';
  }

  // 切换任务完成状态
  toggleTask(task: Task): void {
    task.isCompleted = !task.isCompleted;
  }

  // 删除任务
  deleteTask(index: number): void {
    this.tasks.splice(index, 1); // 从数组中删除指定位置的元素
  }
}

注:splice(index, 1) 是 JavaScript 数组方法,用于删除第 index 个元素。


编写模板(HTML)

打开 todo.component.html,编写界面逻辑:

<!-- src/app/todo/todo.component.html -->
<div class="todo-container">
  <h2>待办事项</h2>

  <!-- 输入框 + 添加按钮 -->
  <div class="input-group">
    <input
      type="text"
      [(ngModel)]="newTaskName"
      placeholder="输入新任务..."
      class="task-input"
    />
    <button (click)="addTask()" class="add-btn">
      添加
    </button>
  </div>

  <!-- 任务列表 -->
  <ul class="task-list">
    <li *ngFor="let task of tasks; let i = index" [class.completed]="task.isCompleted">
      <span>{{ task.name }}</span>
      <div class="btn-group">
        <button (click)="toggleTask(task)" class="toggle-btn">
          {{ task.isCompleted ? '取消完成' : '标记完成' }}
        </button>
        <button (click)="deleteTask(i)" class="delete-btn">
          删除
        </button>
      </div>
    </li>
  </ul>

  <!-- 空状态提示 -->
  <p *ngIf="tasks.length === 0" class="empty-tip">
    暂无任务,请添加一个吧!
  </p>
</div>

注:*ngFor 是 Angular 的循环指令,* 表示这是一个结构型指令。let i = index 表示当前索引。[class.completed] 是动态绑定类名,当 isCompleted 为 true 时,添加 completed 类。


注册组件到模块中

最后,确保 app.module.ts 中声明了 TodoComponent

// src/app/app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from './app.component';
import { TodoComponent } from './todo/todo.component'; // 导入组件

@NgModule({
  declarations: [
    AppComponent,
    TodoComponent  // 添加到声明列表
  ],
  imports: [
    BrowserModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

在主页面中使用组件

打开 app.component.html,替换内容:

<app-todo></app-todo>

保存后,刷新浏览器,你就能看到一个可交互的待办事项应用了!


深入理解数据绑定与事件处理

Angular 2 的核心优势之一是双向数据绑定和事件驱动。

  • [(ngModel)] 是双向绑定指令,它同时监听输入框变化和更新变量。
  • (click) 是事件绑定,当按钮被点击时触发方法。
  • *ngFor*ngIf 是结构型指令,用于动态渲染 DOM。

这些机制让你不再需要手动操作 DOM,而是专注于“数据”和“逻辑”。

例如,toggleTask(task) 方法中,task.isCompleted = !task.isCompleted 会自动更新视图,因为 Angular 使用了变更检测机制。


总结:你的 Angular 2 学习之路才刚刚开始

通过本篇 Angular 2 教程,你已经完成了从零搭建项目、创建组件、实现数据绑定、处理事件等关键步骤。虽然这只是入门,但它为你打下了坚实的基础。

记住,Angular 2 不是“用一次就忘”的工具,而是一个需要持续学习的生态系统。后续你可以深入学习:

  • 路由(Routing)实现页面跳转
  • 服务(Service)实现数据共享
  • HTTP 请求获取远程数据
  • 表单验证与响应式表单
  • 模块化与懒加载优化性能

每一个知识点,都是你构建大型应用的基石。

现在,你的开发工具已经准备就绪,代码仓库已经搭建完成。下一次,不妨尝试将这个待办事项应用升级为支持本地存储的版本,让任务在刷新后依然存在。

别忘了,最好的学习方式就是动手。点击“ng serve”运行项目,修改代码,观察变化——这,就是前端开发的魅力。