Angular完全指南:从安装到高级应用(macOS Big Sur环境)

云信安装大师
90
AI 质量分
10 5 月, 2025
4 分钟阅读
0 阅读

Angular完全指南:从安装到高级应用(macOS Big Sur环境)

引言

Angular是一个由Google维护的流行前端框架,适合构建复杂的单页应用程序(SPA)。本指南将带你在macOS Big Sur系统上完成从环境搭建到高级应用的完整学习路径。

准备工作

环境要求

  • macOS Big Sur (11.0+) 操作系统
  • 管理员权限(用于安装软件)
  • 稳定的网络连接

需要安装的软件

  1. Node.js (包含npm)
  2. Angular CLI
  3. Git (可选,但推荐)

第1部分:环境配置

1.1 安装Node.js

Angular需要Node.js运行时环境。我们推荐使用nvm(Node Version Manager)来管理Node版本:

代码片段
# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

# 重新加载终端配置
source ~/.zshrc   # 如果你使用zsh
# 或者 source ~/.bash_profile   # 如果你使用bash

# 安装最新的LTS版Node.js
nvm install --lts

# 验证安装
node -v
npm -v

注意事项
– nvm允许你轻松切换Node版本,这对同时维护多个Angular项目很有帮助
– LTS(Long Term Support)版本更稳定,适合生产环境

1.2 安装Angular CLI

Angular CLI是官方提供的命令行工具,能极大简化开发流程:

代码片段
npm install -g @angular/cli@latest

# 验证安装
ng version

常见问题
如果遇到权限错误(EACCES),可以尝试:

代码片段
sudo chown -R $USER /usr/local/lib/node_modules

或者使用nvm管理的Node.js环境(推荐)

第2部分:创建第一个Angular应用

2.1 初始化项目

代码片段
ng new my-first-app

# CLI会询问一些配置选项:
? Would you like to add Angular routing? Yes
? Which stylesheet format would you like to use? CSS 

选项说明
– Angular routing:是否包含路由模块(建议选择Yes)
– Stylesheet format:CSS预处理器选择(初学者可选CSS)

2.2 启动开发服务器

代码片段
cd my-first-app
ng serve --open

ng serve会启动一个开发服务器,--open参数会自动在浏览器中打开http://localhost:4200/

开发服务器特性
– Live reload:文件保存时自动刷新浏览器
– Source maps:方便调试TypeScript代码

第3部分:理解Angular基础结构

让我们看看CLI生成的项目结构:

代码片段
my-first-app/
├── src/
│   ├── app/               # 应用主要代码目录
│   │   ├── app.component.css    # 组件样式文件  
│   │   ├── app.component.html   # 组件模板文件  
│   │   ├── app.component.spec.ts # 测试文件  
│   │   └── app.component.ts     # TypeScript组件类  
│   ├── assets/            # 静态资源目录  
│   ├── index.html         # 主HTML文件  
├── angular.json          # Angular配置文件  
├── package.json          # npm依赖配置文件  

3.1 Angular组件解析

打开src/app/app.component.ts

代码片段
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',         // HTML中的自定义标签名 
                               // <app-root></app-root>
                               // index.html中使用这个标签

                               // template: `<h1>Hello World</h1>`,
                               // template可以直接写HTML

                               templateUrl: './app.component.html',
                               // templateUrl指向外部HTML文件

                               styleUrls: ['./app.component.css']
                               // styleUrl指向外部CSS文件

})
export class AppComponent {
    title = 'my-first-app';    // TS类属性,可以在模板中使用{{title}}
}

对应的HTML模板(app.component.html):

代码片段
<div style="text-align:center">
    <h1>
        Welcome to {{ title }}! <!-- {{}}是插值表达式 -->
    </h1>
</div>

第4部分:创建自定义组件

让我们创建一个新的”todo”组件:

代码片段
ng generate component todo 
# or简写 ng g c todo 

这会生成以下文件:

代码片段
src/app/todo/
├── todo.component.css      # CSS样式文件  
├── todo.component.html     # HTML模板文件  
├── todo.component.spec.ts #测试文件  
└── todo.component.ts      # TypeScript类文件 

修改todo.component.ts:

代码片段
import { Component, OnInit } from '@angular/core';

@Component({
    selector: 'app-todo',
    templateUrl: './todo.component.html',
    styleUrls: ['./todo.component.css']
})
export class TodoComponent implements OnInit {
    tasks = ['Learn Angular', 'Build an app', 'Deploy to production'];

    constructor() { }

    ngOnInit(): void { }
}

修改todo.component.html:

代码片段
<h2>Todo List</h2>
<ul>
    <li *ngFor="let task of tasks">{{ task }}</li>
</ul>

app.component.html中使用新组件:

代码片段
<app-todo></app-todo>

关键点解释
*ngFor是Angular的结构指令,用于循环渲染元素(类似v-for)
selector: 'app-todo'定义了如何在其他模板中引用这个组件

第5部分:进阶功能

5.1 HTTP请求示例

首先导入HttpClientModule:

修改src/app/app.module.ts

代码片段
import { HttpClientModule } from '@angular/common/http';

@NgModule({
    declarations: [...],
    imports: [
        BrowserModule,
        HttpClientModule, // <--添加这行

        ...
    ],
})
export class AppModule { }

然后创建一个服务来获取数据:

代码片段
ng generate service data 

编辑生成的data.service.ts

代码片段
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
    providedIn: 'root'
})
export class DataService {

    constructor(private http: HttpClient) { }

    getUsers() {
        return this.http.get('https://jsonplaceholder.typicode.com/users');
    }
}

修改TodoComponent来使用这个服务:

代码片段
import { Component, OnInit } from '@angular/core';
import { DataService } from '../data.service';

@Component({...})
export class TodoComponent implements OnInit {

    users: any[] = [];

    constructor(private dataService: DataService) {}

    ngOnInit() {
        this.dataService.getUsers().subscribe((data: any) => {
            this.users = data;
            console.log(this.users);
        });

        /* 
        或者使用async管道(更推荐):

        users$ = this.dataService.getUsers();

        然后在模板中:
        <div *ngFor="let user of users$ | async">
            {{user.name}}
        </div>
        */

     }
}

修改模板显示用户数据:

代码片段
<h2>User List</h2>

<ul *ngIf="users.length">
    <li *ngFor="let user of users">
        {{user.name}} - {{user.email}}
     </li>
</ul>

<div *ngIf="!users.length">Loading...</div>

5.2 Forms模块

处理表单输入是Web应用的常见需求。让我们添加一个简单的任务输入表单。

首先确保导入了FormsModule:

src/app/app.module.ts

代码片段
import { FormsModule } from '@angular/forms';

@NgModule({
     imports: [
         FormsModule,
         ...
     ]
}) 

export class AppModule {}

修改TodoComponent:

代码片段
 export class TodoComponent implements OnInit {

     newTask = '';

     addTask() {
         if(this.newTask.trim()) {
             this.tasks.push(this.newTask);
             this.newTask = '';
         }
     }

     removeTask(index: number) {
         this.tasks.splice(index,1);
     }
}

更新模板:

代码片段

<h2>Todo List</h2>

<!-- Add Task Form -->
<form (submit)="addTask()">
<input [(ngModel)]="newTask" name="newTask" placeholder="Add a task">
<button type="submit">Add</button>
</form>

<!-- Task List -->
<ul>
<li *ngFor="let task of tasks; let i=index">
{{task}} <button (click)="removeTask(i)">X</button>   
</li>   
</ul>

<!-- User List -->
...

关键点解释
[(ngModel)]:双向数据绑定语法糖(等价于[value]和(input))
(submit)(click) :事件绑定语法

## 总结

通过本教程,你已经学会了:
✅在macOS上搭建Angular开发环境

✅创建和运行一个新的Angular项目

✅理解Angular的基本结构和组件概念

✅创建自定义组件并理解数据绑定

✅使用HTTP服务获取远程数据

✅处理表单输入和事件

### 下一步学习建议
路由:学习如何在单页应用中导航(RouterModule)
状态管理:了解NgRx或RxJS进行复杂状态管理

### 常见问题解决
Q:运行 ng serve时出现端口冲突
A:ng serve --port=4201

Q:样式不生效
A:

代码片段
/* styles.css */ 

body, html{
margin :0;
padding :0;
height :100%;
}<br>
 

Q:如何优化生产构建
A:ng build --prod

希望这篇指南能帮助你顺利开始Angular之旅!Happy coding! 🚀

原创 高质量