具体描述
本书堪称Angular领域的里程碑式著作,涵盖了关于Angular的几乎所有内容。对于没有经验的人,本书平实、通俗的讲解,递进、严密的组织,可以让人毫无压力地登堂入室,迅速领悟新一代Web应用开发的精髓。如果你有相关经验,那本书对Angular概念和技术细节的全面剖析,以及引人入胜、切中肯綮的讲解,将帮助你彻底掌握这个框架,在自己职业技术修炼之路上更进一步。
作者简介
Ari Lerner
全栈工程师,拥有多年Angular经验,自办并运营Angular电子报ng-newsletter.com,在著名硅谷工程师培训学校Hack Reactor担任AngularJS讲师。Fullstack.io创始人。
Felipe Coury
Gistia Labs联合创始人兼CTO。
Nate Murray
全栈工程师,曾任职于IFTTT,拥有数据挖掘和增量Web服务等方面的背景。
Carlos Taborda
Gistia Labs联合创始人兼主管。
目录信息
1.1 仿制Reddit网站 1
1.2 起步 3
1.2.1 TypeScript 3
1.2.2 angular-cli 3
1.2.3 示例项目 4
1.3 运行应用 7
1.3.1 制作Component 8
1.3.2 导入依赖 9
1.3.3 Component注解 10
1.3.4 用templateUrl添加模板 11
1.3.5 添加template 11
1.3.6 用styleUrls添加CSS样式 12
1.3.7 加载组件 12
1.4 把数据添加到组件中 13
1.5 使用数组 15
1.6 使用UserItemComponent组件 18
1.6.1 渲染UserItemComponent 18
1.6.2 接收输入 19
1.6.3 传入Input值 20
1.7 “启动”速成班 21
1.8 扩展你的应用 22
1.8.1 添加CSS 24
1.8.2 应用程序组件 24
1.8.3 添加互动 26
1.8.4 添加文章组件 29
1.9 渲染多行 36
1.9.1 创建Article类 36
1.9.2 存储多篇文章 40
1.9.3 使用inputs配置ArticleComponent 41
1.9.4 渲染文章列表 42
1.10 添加新文章 44
1.11 最后的修整 44
1.11.1 显示文章所属的域名 44
1.11.2 基于分数重新排序 45
1.12 全部代码 45
1.13 总结 45
1.14 获得帮助 46
第2章 TypeScript 47
2.1 Angular是用TypeScript构建的 47
2.2 TypeScript提供了哪些特性 48
2.3 类型 49
2.4 内置类型 50
2.4.1 字符串 50
2.4.2 数字 50
2.4.3 布尔类型 51
2.4.4 数组 51
2.4.5 枚举 51
2.4.6 任意类型 52
2.4.7 “无”类型 52
2.5 类 52
2.5.1 属性 52
2.5.2 方法 53
2.5.3 构造函数 54
2.5.4 继承 55
2.6 工具 57
2.6.1 胖箭头函数 57
2.6.2 模板字符串 58
2.7 总结 59
第3章 Angular的工作原理 60
3.1 应用 60
3.1.1 主导航组件 61
3.1.2 面包屑导航组件 61
3.1.3 产品列表组件 62
3.2 产品数据模型 64
3.3 组件 64
3.4 组件注解 66
3.4.1 组件selector 66
3.4.2 组件template 67
3.4.3 添加产品 67
3.4.4 用模板绑定来查看产品 68
3.4.5 添加更多产品 69
3.4.6 选择一个产品 70
3.4.7 用<products-list>列出产品 70
3.5 产品列表组件 73
3.5.1 设置ProductsList的@Component配置项 73
3.5.2 组件的输入 74
3.5.3 组件的输出 77
3.5.4 触发自定义事件 78
3.5.5 编写ProductsList的控制器类 79
3.5.6 编写ProdctsList的视图模板 80
3.5.7 完整的ProductsList组件 81
3.6 产品条目组件 83
3.6.1 产品条目的组件配置 83
3.6.2 产品条目组件的定义类 84
3.6.3 产品条目组件的template 84
3.6.4 完整的ProductRow代码清单 85
3.7 产品图片组件 85
3.8 价格展示组件 86
3.9 产品分类组件 87
3.10 创建NgModule并启动应用 88
3.11 完整的项目 89
3.12 关于数据架构的一点说明 90
第4章 内置指令 91
4.1 简介 91
4.2 ngIf 91
4.3 ngSwitch 92
4.4 ngStyle 93
4.5 ngClass 95
4.6 ngFor 98
4.7 ngNonBindable 102
4.8 总结 102
第5章 Angular中的表单 103
5.1 表单——既重要,又复杂 103
5.2 FormControl和FormGroup 103
5.2.1 FormControl 104
5.2.2 FormGroup 104
5.3 我们的第一个表单 105
5.3.1 加载FormsModule 106
5.3.2 简易SKU表单:@Component注解 107
5.3.3 简易SKU表单:template 107
5.3.4 简易SKU表单:组件定义类 110
5.3.5 试试看 110
5.4 使用FormBuilder 111
5.5 响应式表单 FormBuilder 112
5.5.1 使用FormBuilder 112
5.5.2 在视图中使用myForm 113
5.5.3 试试看 114
5.6 添加验证 115
5.6.1 显式地把sku设置为实例变量 116
5.6.2 自定义验证器 120
5.7 监听变化 121
5.8 ngModel 122
5.9 总结 124
第6章 HTTP 125
6.1 简介 125
6.2 使用 @angular/http 126
6.3 基本请求 127
6.3.1 构建SimpleHTTPComponent的@Component 127
6.3.2 构建SimpleHTTPComponent的template 128
6.3.3 构建SimpleHTTPComponent控制器 128
6.3.4 完整的SimpleHTTP-Component 130
6.4 编写YouTubeSearchComponent 130
6.4.1 编写SearchResult 132
6.4.2 编写YouTubeService 132
6.4.3 编写SearchBox 140
6.4.4 编写SearchResult-Component 145
6.4.5 编写YouTubeSearch-Component 147
6.5 @angular/http API 150
6.5.1 发起一个POST请求 150
6.5.2 PUT/PATCH/DELETE/HEAD 150
6.5.3 RequestOptions 151
6.6 总结 151
第7章 路由 152
7.1 为什么需要路由 152
7.2 客户端路由的工作原理 153
7.2.1 初级阶段:使用锚标记 153
7.2.2 进化:HTML5客户端路由 154
7.3 编写第一个路由配置 155
7.4 Angular路由的组成部件 155
7.4.1 导入 155
7.4.2 路由配置 155
7.4.3 安装路由配置 156
7.4.4 使用<router-outlet>调用RouterOutlet指令 157
7.4.5 使用[routerLink]调用routerLink指令 158
7.5 整合 159
7.5.1 创建组件 160
7.5.2 应用程序组件 161
7.5.3 配置路由 163
7.6 路由策略 164
7.7 路径定位策略 165
7.8 运行应用程序 165
7.9 路由参数 167
7.10 音乐搜索应用 168
7.10.1 首要步骤 169
7.10.2 SpotifyService 170
7.10.3 SearchComponent 171
7.10.4 尝试搜索 179
7.10.5 TrackComponent 180
7.10.6 音乐搜索应用小结 182
7.11 路由器钩子 182
7.11.1 AuthService 183
7.11.2 LoginComponent 184
7.11.3 ProtectedComponent组件和路由守卫 186
7.12 嵌套路由 190
7.12.1 配置路由 191
7.12.2 ProductsComponent组件 191
7.13 总结 194
第8章 依赖注入 195
8.1 注入示例:PriceService 196
8.2 “别打给我们……” 197
8.3 依赖注入的部件 199
8.4 尝试注入器 200
8.5 用NgModule提供依赖 201
8.6 提供者 202
8.6.1 使用类 202
8.6.2 使用工厂 203
8.6.3 使用值 205
8.6.4 使用别名 205
8.7 应用中的依赖注入 205
8.8 使用注入器 207
8.9 替换值 211
8.10 NgModule 215
8.10.1 NgModule与JavaScript模块 215
8.10.2 编译器与组件 215
8.10.3 依赖注入与提供者 216
8.10.4 组件可见性 217
8.10.5 指定提供者 218
8.11 总结 219
第9章 Angular数据架构 220
第10章 使用可观察对象的数据架构,
第1部分:服务 222
10.1 可观察对象和RxJS 222
10.1.1 注意:一些必备的RxJS相关知识 222
10.1.2 学习响应式编程和RxJS 223
10.2 聊天应用概览 224
10.2.1 组件 225
10.2.2 数据模型 226
10.2.3 服务 226
10.2.4 总结 226
10.3 实现数据模型 227
10.3.1 User 227
10.3.2 Thread 227
10.3.3 Message 228
10.4 实现UserService 228
10.4.1 currentUser流 229
10.4.2 设置新用户 230
10.4.3 UserService.ts 231
10.5 MessagesService 231
10.5.1 newMessages流 231
10.5.2 messages流 233
10.5.3 操作流模式 233
10.5.4 共享流 234
10.5.5 把Message对象添加到messages流中 235
10.5.6 完整的MessagesService 238
10.5.7 试用MessagesService 241
10.6 ThreadsService 242
10.6.1 当前一组Thread的映射(threads流) 242
10.6.2 按时间逆序排列的Thread列表(orderedthreads流) 246
10.6.3 当前已选的Thread(currentThread流) 246
10.6.4 当前已选Thread的Message列表(currentThread- Messages流) 248
10.6.5 完整的ThreadsService 250
10.7 总结 251
第11章 使用可观察对象的数据架构,
第2部分:视图组件 252
11.1 构建视图:顶层组件ChatApp 252
11.2 ChatThreads组件 254
11.2.1 ChatThreads控制器 255
11.2.2 ChatThreads的template 255
11.3 单个ChatThread组件 256
11.3.1 ChatThread控制器和ngOnInit 257
11.3.2 ChatThread的template 258
11.3.3 ChatThread的完整代码 258
11.4 ChatWindow组件 259
11.4.1 ChatWindow组件类属性 260
11.4.2 ChatWindow的ngOnInit 261
11.4.3 ChatWindow的send-Message 261
11.4.4 ChatWindow的onEnter 262
11.4.5 ChatWindow的scrollTo-Bottom 262
11.4.6 ChatWindow的template 263
11.4.7 处理键盘动作 264
11.4.8 使用ngModel 264
11.4.9 点击Send按钮 265
11.4.10 完整的ChatWindow组件 265
11.5 ChatMessage组件 267
11.5.1 设置incoming属性 268
11.5.2 ChatMessage的template 268
11.5.3 完整的ChatMessage代码清单 270
11.6 ChatNavBar组件 273
11.6.1 ChatNavBar的@Component 273
11.6.2 ChatNavBar控制器 273
11.6.3 ChatNavBar的template 274
11.6.4 完整的ChatNavBar组件 275
11.7 总结 276
11.8 更进一步 277
第12章 基于TypeScript的Redux 简介 278
12.1 Redux 279
12.2 Redux核心概念 280
12.2.1 reducer是什么 280
12.2.2 定义Action和Reducer的接口 281
12.2.3 创建第一个Reducer 281
12.2.4 运行第一个Reducer 282
12.2.5 使用action调整计数器 283
12.2.6 reducer的switch 284
12.2.7 action的“参数” 285
12.3 保存state 286
12.3.1 使用store 287
12.3.2 使用subscribe进行通知 287
12.3.3 Redux核心 290
12.4 消息应用 291
12.4.1 消息应用的state 291
12.4.2 消息应用的action 292
12.4.3 消息应用的reducer 292
12.4.4 试用action 295
12.4.5 action creator 296
12.4.6 使用真正的Redux 297
12.5 在Angular中使用Redux 299
12.6 规划应用 299
12.7 组建Redux 300
12.7.1 定义应用的state 300
12.7.2 定义reducer 301
12.7.3 定义action creator 301
12.7.4 创建store 302
12.8 CounterApp组件 303
12.9 提供store 304
12.10 启动应用 305
12.11 CounterComponent 306
12.11.1 import 306
12.11.2 模板 306
12.11.3 constructor 307
12.11.4 整合 308
12.12 更进一步 310
12.13 参考资源 310
第13章 在Angular中引入Redux 312
13.1 阅读背景 312
13.2 聊天应用概览 313
13.2.1 组件 313
13.2.2 数据模型 314
13.2.3 reducer 315
13.2.4 总结 315
13.3 实现数据模型 315
13.3.1 User 315
13.3.2 Thread 316
13.3.3 Message 316
13.4 应用的state 316
13.4.1 关于代码布局 317
13.4.2 根reducer 317
13.4.3 UserState 318
13.4.4 ThreadsState 318
13.4.5 可视化AppState 319
13.5 构建reducer(和action creator) 321
13.5.1 设置当前用户的action creator 321
13.5.2 UsersReducer:设置当前用户 321
13.5.3 会话和消息概览 322
13.5.4 添加新会话的action creator 322
13.5.5 添加新会话的reducer 323
13.5.6 添加新消息的action creator 324
13.5.7 添加新消息的reducer 325
13.5.8 选择会话的action creator 326
13.5.9 选择会话的reducer 327
13.5.10 reducer总结 328
13.6 构建Angular聊天应用 328
13.6.1 顶层组件ChatApp 330
13.6.2 ChatPage 330
13.6.3 容器型组件与展示型组件 331
13.7 构建ChatNavBar 332
13.7.1 Redux选择器 334
13.7.2 会话选择器 334
13.7.3 未读消息总数选择器 336
13.8 构建ChatThreads组件 336
13.8.1 ChatThreads控制器 337
13.8.2 ChatThreads的template 338
13.9 单个ChatThread组件 338
13.10 构建ChatWindow组件 340
13.10.1 ChatWindow的update-State() 341
13.10.2 ChatWindow的scrollToBottom() 342
13.10.3 ChatWindow的sendMessage 342
13.10.4 ChatWindow的onEnter 343
13.10.5 ChatWindow的template 343
13.10.6 处理键盘动作 345
13.10.7 使用ngModel 345
13.10.8 点击Send按钮 345
13.11 ChatMessage组件 345
13.11.1 设置incoming属性 346
13.11.2 ChatMessage的template 346
13.12 总结 347
第14章 高级组件 349
14.1 样式 349
14.1.1 视图(样式)封装 351
14.1.2 Shadow DOM封装 354
14.1.3 不使用封装 355
14.2 创建popup指令:引用并修改宿主元素 357
14.2.1 popup指令的结构 357
14.2.2 使用ElementRef 359
14.2.3 绑定到host属性 360
14.2.4 添加按钮并使用exportAs 362
14.3 使用内容投影创建消息面板 363
14.3.1 改变host属性的CSS类 364
14.3.2 使用ng-content 364
14.4 查询相邻的指令:编写标签页 366
14.4.1 Tab组件 367
14.4.2 Tabset组件 367
14.4.3 使用Tabset 369
14.5 生命周期钩子 370
14.5.1 OnInit和OnDestroy 371
14.5.2 OnChanges 374
14.5.3 DoCheck 378
14.5.4 AfterContentInit、AfterViewInit、AfterContentChecked和AfterViewChecked 386
14.6 高级模板 391
14.6.1 重写ngIf:ngBookIf 392
14.6.2 重写ngFor:ngBook-Repeat 394
14.7 变更检测 398
14.7.1 自定义变更检测 401
14.7.2 Zones 405
14.7.3 可观察对象和OnPush 406
14.8 总结 409
第15章 测试 410
15.1 测试驱动? 410
15.2 端对端测试与单元测试 411
15.3 测试工具 411
15.3.1 Jasmine 411
15.3.2 Karma 412
15.4 编写单元测试 412
15.5 Angular单元测试框架 412
15.6 测试前准备 413
15.7 测试服务类和HTTP 415
15.7.1 HTTP要点 416
15.7.2 伪装 417
15.7.3 模拟 417
15.7.4 Http MockBackend 418
15.7.5 TestBed.configureTes- tingModule和提供者 418
15.7.6 测试getTrack方法 419
15.8 测试组件间的路由 424
15.8.1 为测试创建路由器 424
15.8.2 模拟依赖 427
15.8.3 探子 427
15.9 回到测试代码 429
15.9.1 fakeAsync和advance 431
15.9.2 inject 432
15.9.3 测试ArtistComponent组件初始化 432
15.9.4 测试ArtistComponent方法 433
15.9.5 测试ArtistComponent DOM模板值 434
15.10 测试表单 436
15.10.1 创建一个ConsoleSpy 438
15.10.2 安装ConsoleSpy 439
15.10.3 配置测试模块 439
15.10.4 测试表单 440
15.10.5 重构表单测试 441
15.11 测试HTTP请求 444
15.11.1 测试POST方法 445
15.11.2 测试DELETE方法 446
15.11.3 测试HTTP头 447
15.11.4 测试YouTubeService 448
15.12 总结 452
第16章 把AngularJS应用升级到Angular 453
16.1 周边概念 453
16.2 我们要构建什么 454
16.3 把AngularJS映射到Angular 455
16.4 关于互操作性的需求 456
16.5 AngularJS应用 456
16.5.1 AngularJS应用的HTML 458
16.5.2 代码概览 458
16.5.3 AngularJS:PinsService 459
16.5.4 AngularJS:配置路由 460
16.5.5 AngularJS:HomeContro-ller 461
16.5.6 AngularJS:HomeContro-ller模板 461
16.5.7 AngularJS:pin指令 462
16.5.8 AngularJS:pin指令模板 462
16.5.9 AngularJS:AddContro-ller 463
16.5.10 AngularJS:AddContro-ller模板 465
16.5.11 AngularJS:总结 467
16.6 构建混合式应用 468
16.6.1 混合式应用的结构 468
16.6.2 引导混合式应用 471
16.6.3 我们要升级什么 473
16.6.4 插一小段内容:类型文件 475
16.6.5 写Angular的PinControls- Component 479
16.6.6 使用Angular的PinCon- trolsComponent 481
16.6.7 把Angular的PinControls- Component降级到 AngularJS 482
16.6.8 用Angular添加图钉 483
16.6.9 把AngularJS的PinsSer-vice和$state升级到Angular 484
16.6.10 写Angular版的AddPin- Component 485
16.6.11 使用AddPinComponent 490
16.6.12 把Angular的服务暴露给AngularJS 490
16.6.13 实现AnalyticsService 491
16.6.14 把Angular的Analytics- Service降级到AngularJS 491
16.6.15 在AngularJS中使用AnalyticsService 492
16.7 总结 493
16.8 参考资源 493
· · · · · · (收起)
读后感
用户评价
**技术细节的深度挖掘,让Angular的“黑盒子”在我眼前展开** 在我尝试使用Angular来构建一个稍具规模的Web应用时,我遇到了很多阻碍。我知道Angular是一个功能强大的框架,但很多时候,我感觉自己只是在“调用”它提供的API,而并不真正理解它在底层做了什么。例如,当我的应用出现性能问题时,我不知道该从哪里入手去排查,当我想实现一些高级的功能时,也往往不知道该如何正确地使用Angular的机制。 《Angular权威教程》这本书,恰恰解决了我的这个痛点。它并没有停留在“如何使用”的层面,而是深入到Angular的内部实现机制。比如,书中详细讲解了Angular的渲染流程,包括了变更检测是如何工作的,模板是如何被编译成JavaScript代码的,以及DOM是如何被更新的。通过理解这些底层的原理,我才真正明白了为什么Angular的性能如此出色,以及在什么情况下需要调整变更检测的策略来优化性能。 书中对于Zone.js的讲解也让我豁然开朗。Zone.js是Angular异步操作管理的核心,它能够帮助Angular自动感知到各种异步事件的发生,并触发变更检测。我之前对Zone.js知之甚少,甚至不知道它的存在,但通过这本书的讲解,我才明白它在Angular中扮演着多么重要的角色。理解了Zone.js,我就能够更好地处理各种异步场景,并且避免一些潜在的bug。 此外,书中关于Angular的路由器(Router)和表单(Forms)的讲解也让我印象深刻。它不仅仅介绍了路由的配置和导航,还深入探讨了路由守卫(Route Guards)、路由参数解析等高级特性。在表单方面,它详细讲解了模板驱动表单和响应式表单的优劣,以及如何进行自定义验证。这些深入的技术细节,让我能够更灵活、更有效地利用Angular来构建复杂的功能。 这本书的优点在于,它能够将Angular的“黑盒子”一点点地打开,让我们看到其精妙的设计和强大的实现。对于那些希望成为Angular专家,能够解决各种疑难杂症的开发者来说,《Angular权威教程》绝对是一本不可或缺的参考书。它让我对Angular有了更深刻的理解,也让我更有信心去应对未来开发中遇到的各种挑战。
**从前端小白到独当一面的工程师,Angular成就了我!** 在我拿到《Angular权威教程》这本书之前,我对前端开发的理解还停留在“能写写HTML、CSS,勉强用用JavaScript实现一些简单的交互”的阶段。那时候,我看着那些复杂的框架和库,心里充满了畏惧,觉得它们遥不可及。直到我偶然听同事提起Angular,并被推荐了这本书,我才下定决心要好好学习一下。 拿到书的那一刻,我就被它厚实的体积和严谨的排版吸引了。翻开第一页,作者用非常通俗易懂的语言,从Angular的诞生背景、核心理念开始讲起,没有上来就堆砌代码,而是先建立起了我对于整个Angular生态的宏观认知。这一点对我这个新手来说太重要了,我不再觉得自己是在盲目地学习一些孤立的知识点,而是能够理解这些知识点在整个框架中扮演的角色。 书中对TypeScript的讲解也非常细致,这一点我必须单独强调。我之前对TypeScript的了解仅限于“JavaScript加了类型”,但这本书让我真正体会到了静态类型带来的好处,比如更早地发现错误,更清晰的代码结构,以及更强大的IDE辅助。通过书中大量的代码示例和练习,我很快就掌握了TypeScript的核心概念,并且能够熟练地运用它来编写Angular应用。 最让我印象深刻的是,书中对于Angular组件化开发的讲解。从单个组件的创建、模板编写、数据绑定,到组件之间的通信,每一个环节都讲解得循序渐进,逻辑清晰。我尤其喜欢书中关于“声明式UI”和“响应式编程”的阐述,这让我对如何构建可维护、可扩展的复杂前端应用有了全新的认识。以往我写JavaScript代码时,经常会陷入回调地狱,或者难以追踪状态的变化,但通过学习Angular的响应式编程思想,我学会了如何使用RxJS来优雅地处理异步操作和状态管理,代码的可读性和可维护性得到了极大的提升。 总而言之,《Angular权威教程》这本书不仅仅是一本技术手册,更像是一位经验丰富的导师,带领我一步步走进Angular的世界。它让我从一个迷茫的前端小白,逐渐成长为一个能够独立构建复杂Angular应用的工程师。我非常庆幸自己能够遇到这本书,它为我的前端开发之路打下了坚实的基础,也让我对未来的学习和职业发展充满了信心。
**不仅仅是学习Angular,更是学习一种更优雅的开发模式** 在接触Angular之前,我习惯于使用一些更“自由”的前端技术栈,认为自己可以灵活地组合各种库来满足需求。然而,随着项目规模的扩大,我开始感受到这种自由带来的混乱:代码的可维护性差,团队协作效率低,以及难以进行有效的测试。正是在这种困境中,我开始重新审视Angular,并找到了《Angular权威教程》。 这本书带给我的,不仅仅是Angular技术的学习,更重要的是一种全新的、更加结构化的开发模式。作者在书中反复强调了“约定优于配置”的思想,以及Angular所倡导的模块化、组件化、服务化的开发理念。我开始理解,为什么Angular会设计出NgModules、Components、Services等概念,它们并非是多余的,而是为了构建大型、可维护、可扩展的应用而存在的。 书中关于RxJS的深入讲解,更是让我看到了函数式编程和响应式编程的强大魅力。在学习RxJS的过程中,我逐渐摆脱了过去那种命令式的编码风格,学会了如何用更声明式、更具表达力的方式来处理数据流和异步事件。这让我写出的代码更加简洁、易于理解,并且能够有效地避免副作用。 我特别喜欢书中关于测试的章节。Angular对测试有着非常好的支持,而这本书则详细介绍了如何编写单元测试、集成测试,甚至端到端测试。通过学习书中提供的测试策略和代码示例,我才真正意识到,为什么Angular能够构建出如此稳定和可靠的应用。它让我明白,测试不仅仅是发现bug的工具,更是保证代码质量和可维护性的重要保障。 《Angular权威教程》教会了我如何在一个清晰、规范的框架下进行开发,如何更好地组织代码,如何更有效地进行团队协作,以及如何构建出真正“健壮”的应用。它让我从一个“能够写代码”的开发者,成长为一个“懂得如何优雅地写代码”的开发者。这本书对我个人技术成长的影响是巨大的,我强烈推荐给所有希望在前端开发领域有更深入发展的朋友。
**从新手到资深,这本书是我Angular之路上的重要里程碑** 作为一名初入前端开发领域的新人,《Angular权威教程》是我接触到的第一本系统性讲解Angular的书籍。坦白说,一开始我被书的厚度和复杂性吓到了,但当我真正开始阅读之后,我才发现我的担忧是多余的。作者以一种非常友好的方式,循序渐进地引导我进入Angular的世界。 书中从最基础的概念讲起,比如Angular是什么,它能做什么,以及它的核心优势。然后,它一步步地深入到具体的语法和特性,比如模板语法、数据绑定、指令、管道等等。每一个知识点都配有清晰的代码示例,并且作者会详细地解释代码的含义和背后的原理。这让我觉得,我不是在死记硬背,而是在真正地理解Angular。 让我印象深刻的是,这本书不仅仅关注Angular本身的API,还花费了大量的篇幅来讲解与之相关的技术,比如TypeScript、RxJS、HTTP客户端等。这让我明白,Angular是一个完整的生态系统,而掌握这些相关的技术,能够让我更全面地理解和使用Angular。特别是对于TypeScript的讲解,帮助我摆脱了对JavaScript类型的不确定性,让我能够写出更安全、更规范的代码。 本书最大的亮点在于,它非常注重实战。书中提供了大量的练习题和项目案例,让我能够将学到的知识应用到实际的开发中。通过完成这些练习和项目,我不仅巩固了所学的知识,还锻炼了自己的解决问题的能力。我记得在完成一个需要复杂数据交互的项目时,我运用了书中讲解的响应式编程思想,成功地解决了数据同步的问题,这让我非常有成就感。 《Angular权威教程》就像是一本通往Angular世界的“导航仪”,它指引着我前进的方向,帮助我避开弯路,让我能够高效地学习和掌握Angular。即使在我成为一名资深的Angular开发者之后,我仍然会时不时地翻阅这本书,从中汲取新的灵感,巩固我的知识体系。这本书对于任何想要学习Angular的人来说,都是一本不可多得的宝藏。
**深入理解Angular核心,从入门到精通的必读之作** 作为一名有几年前端开发经验的开发者,我对市面上各种前端框架都有所涉猎。然而,在我开始接触Angular时,发现它与我之前熟悉的框架在设计理念上有着显著的差异。很多时候,我能够写出看似工作的代码,但却很难理解其背后的原理,也无法写出真正高效、可维护的代码。正是在这种情况下,我找到了《Angular权威教程》。 这本书并没有简单地罗列API,而是花了大量的篇幅去阐述Angular的设计哲学和核心概念。例如,在讲解模块化(NgModules)时,作者并没有仅仅告诉我们如何导入导出,而是深入剖析了模块的作用,以及它在项目结构、依赖管理和代码分割中的重要性。这让我明白了为什么Angular要采用模块化的方式,以及如何通过合理的模块划分来优化应用的性能和可维护性。 对于Angular的依赖注入(Dependency Injection)机制,书中也进行了详尽的解读。我之前对DI的理解非常模糊,只是知道它能够帮助我们解耦,但具体如何实现,以及它带来的好处,一直没有一个清晰的概念。这本书通过大量的图示和代码示例,将DI的原理讲得明明白白,让我能够理解它是如何工作的,并且学会如何利用它来构建更加健壮和易于测试的应用。 另外,书中关于性能优化的章节也让我受益匪浅。Angular提供了许多内置的性能优化手段,比如变更检测策略(Change Detection Strategies)和懒加载(Lazy Loading)。在读这本书之前,我对于如何优化Angular应用的性能知之甚少,经常遇到页面卡顿、加载缓慢的问题。这本书详细讲解了这些优化技巧,并且提供了实际的案例,让我能够将这些知识应用到我的项目中,显著提升了应用的响应速度和用户体验。 总的来说,《Angular权威教程》是一本非常值得推荐的书籍,尤其适合那些希望深入理解Angular、并将其应用到实际项目中的开发者。它不仅仅提供了技术指导,更重要的是帮助我构建了一个完整的知识体系,让我能够从根本上理解Angular的强大之处,并且能够写出更高质量的代码。
其实 angular 的官网已经是非常详细的学习资料了,问题是知识太细太全面,官网看不下去的时候可以看这本书,切换一下,效果会更好
推荐书评 Angular权威教程 读后感(上) http://www.jianshu.com/p/9170620f772a Angular权威教程 读后感(下) http://www.jianshu.com/p/1eb10ffb82e8
刚好想了解一些前后端分离的知识,Angular 是个不错的选择,不过对我还是有点门槛,前端涉及的概念需要慢慢熟悉(e.g. RxJS、Redux)。总的来说书不错,但不能急于求成地去读。
一般吧
总体来说,作为一本入门书籍还不错~