Angular的理解

打印 上一主题 下一主题

主题 1601|帖子 1601|积分 4803

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Angular 是一个由 Google 维护的全功能前端框架,得当构建复杂的企业级应用。它采用 TypeScript 作为首选语言,提供了一套完整的解决方案,包罗数据绑定、依赖注入、路由、表单处理等。

1. Angular 的核心概念

1.1 组件化架构

Angular 应用由**组件(Components)**构成,每个组件包含:


  • HTML 模板(定义 UI)
  • CSS 样式(定义表面)
  • TypeScript 类(定义逻辑)
  • 元数据(@Component 装饰器)(配置组件)
  1. @Component({
  2.   selector: 'app-root',
  3.   templateUrl: './app.component.html',
  4.   styleUrls: ['./app.component.css']
  5. })
  6. export class AppComponent {
  7.   title = 'My Angular App';
  8. }
复制代码
1.2 模块化(NgModule)

Angular 采用模块化设计,每个模块(NgModule)封装一组相关功能:


  • 声明组件、指令、管道
  • 导入其他模块
  • 提供服务(依赖注入)
  1. @NgModule({
  2.   declarations: [AppComponent], // 注册组件
  3.   imports: [BrowserModule],     // 导入其他模块
  4.   providers: [UserService],    // 注册服务
  5.   bootstrap: [AppComponent]    // 启动组件
  6. })
  7. export class AppModule {}
复制代码

2. 数据绑定与变更检测

Angular 采用双向数据绑定([(ngModel)])和单向数据流(@Input() / @Output())。
2.1 数据绑定方式

语法阐明{{ expression }}插值(显示变量)[property]="expression"属性绑定(父 → 子)(event)="handler()"事件绑定(子 → 父)[(ngModel)]="property"双向绑定(表单输入) 2.2 变更检测(Change Detection)



  • 默认策略:Default(检查所有组件)
  • 优化策略:OnPush(仅当输入变革时检查)
  1. @Component({
  2.   changeDetection: ChangeDetectionStrategy.OnPush
  3. })
复制代码

3. 依赖注入(DI)

Angular 的 DI 系统管理服务(Services)的创建和共享:


  • @Injectable() 标记可注入的服务
  • providers 在模块或组件级别注册服务
  • 构造函数注入(主动解析依赖)
  1. @Injectable({ providedIn: 'root' }) // 全局单例
  2. export class UserService {
  3.   getUsers() { return [...] }
  4. }
  5. @Component({
  6.   providers: [UserService] // 组件级实例
  7. })
  8. export class UserComponent {
  9.   constructor(private userService: UserService) {}
  10. }
复制代码

4. 路由(Router)

Angular 提供 @angular/router 进行 SPA 导航:


  • RouterModule.forRoot(routes) 配置路由
  • <router-outlet> 渲染匹配的组件
  • Router 服务 编程式导航
  1. const routes: Routes = [
  2.   { path: '', component: HomeComponent },
  3.   { path: 'users', component: UserListComponent }
  4. ];
  5. @NgModule({
  6.   imports: [RouterModule.forRoot(routes)],
  7. })
  8. export class AppModule {}
复制代码

5. 表单处理

Angular 提供模板驱动表单相应式表单两种方式:
5.1 模板驱动表单



  • 使用 ngModel 绑定命据
  • 得当简朴表单
  1. <form #form="ngForm" (ngSubmit)="onSubmit(form)">
  2.   <input name="username" ngModel required>
  3.   <button type="submit">Submit</button>
  4. </form>
复制代码
5.2 相应式表单



  • 使用 FormControl、FormGroup 动态管理表单
  • 得当复杂表单验证
  1. loginForm = new FormGroup({
  2.   username: new FormControl('', Validators.required),
  3.   password: new FormControl('')
  4. });
复制代码

6. HTTP 通讯

Angular 提供 HttpClient 进行 HTTP 请求:
  1. @Injectable()
  2. export class ApiService {
  3.   constructor(private http: HttpClient) {}
  4.   getUsers() {
  5.     return this.http.get<User[]>('/api/users');
  6.   }
  7. }
复制代码

7. 状态管理(NgRx)

对于大型应用,可使用 NgRx(基于 Redux 的状态管理):


  • Store(全局状态)
  • Actions(触发状态变更)
  • Reducers(纯函数更新状态)
  • Effects(处理副作用,如 API 调用)
  1. // 定义 Action
  2. export const loadUsers = createAction('[User] Load Users');
  3. // 定义 Reducer
  4. const userReducer = createReducer(
  5.   initialState,
  6.   on(loadUsers, (state) => ({ ...state, loading: true }))
  7. );
复制代码

8. Angular 的优势与劣势

✅ 优势



  • 全功能框架:内置路由、表单、HTTP、依赖注入等
  • TypeScript 支持:强类型,淘汰运行时错误
  • 企业级实用:得当大型复杂应用
  • CLI 工具:ng generate 快速天生代码
  • 长期支持(LTS):Google 维护,版本稳定
❌ 劣势



  • 学习曲线陡峭:概念多(模块、依赖注入、RxJS 等)
  • 性能开销:比 React/Vue 稍重(但可通过 OnPush 优化)
  • 机动性较低:相比 React,Angular 更“固执己见”

9. Angular vs React vs Vue

特性AngularReactVue架构全功能框架库(需搭配生态)渐进式框架语言TypeScriptJavaScript/TSJavaScript/TS数据绑定双向/单向单向双向/单向学习曲线高中低实用场景企业级应用机动生态快速开辟
10. 学习资源



  • 官方文档:angular.io
  • 教程

    • Angular Tour of Heroes
    • Ultimate Angular(付费)

  • 社区

    • Angular Subreddit
    • Angular Discord


总结

Angular 是一个强盛但复杂的框架,得当须要长期维护的大型项目。如果你喜欢结构化、强类型、全栈式解决方案,Angular 是一个很好的选择。但对于小型项目或快速原型开辟,React 或 Vue 可能更合适。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表