《Angular 初学者快速上手教程》课程发布已有一年,期间收到了很多读者的留言,这里摘录几条,仅供参考。为了不打搅这些朋友,部分采用了匿名。
本课程是 Angular 基础教程,目标是带领读者快速上手实战。课程以 3 个核心概念作为主线(组件、路由和模块)以及在业务开发过程中必须用到的特性(工具、指令、表单、RxJS、i18n、测试)来展开讲解。
除了这 3 个核心概念具有很强的关联性外,其他内容都是完全独立的,读者在用到的时候可以随时翻阅。注射器部分的内容稍微复杂一些,日常开发过程中用到的不多。
认真学完这门课程之后,将会深入理解新版本 Angular 的概念模型,具备使用 Angular 上手进行开发的基本能力。
大漠穷秋,10 年开发经验,其中 5 年后端、5 年前端。熟悉 Java 相关的技术体系:Spring MVC、MyBatis、Ehcache、ELK、MySQL 等。在前端技术方面尤其有深入的研究,先后使用并研究过 Flex、jQuery、Ext JS、Backbone、Bootstrap、Angular 等常见的前端技术体系。
2016 ~ 2017 年期间,担任 Angular Developer PM,专门帮助 Google Angular 团队在中国推广 Angular 框架。
出版了《Ext 江湖》一本图书,翻译出版了《ActionScript 3.0 游戏设计基础(第二版)》《用 AngularJS 开发下一代 Web 应用》《迈向 Angular 2》三本图书。
有的读者可能会问:Angular 相关的文章到处都有,我为什么要来学习这门课?
这是一个非常好的问题,说明读者对阅读内容有质量要求。
如果是我,我也会有这样的疑惑。
整体上说,这门课的内容有以下特色。
最近 5 年我一直在“玩”前端方面的东西,比如 jQuery、SVG、Ext JS、Adobe Flex、Angular;尤其在 2016 年,这一整年的时间我代表 Angular 项目组在中国进行技术推广。因此,我会按照初学者一般的学习过程,用我自己的语言一步一步进行讲解。
在这 5 年里,我在超过 50 家企业、开源组织、大学里面进行了大量演讲,在网络上发布了大量的视频和文章。在到处奔波的过程中,认识了很多人,有经验丰富的后端开发者、也有新入行的初学者,他们跟我说过很多自己的困惑,我会把常见的一些疑问融入在内容里面。
我也会扫平日常开发中常见的坑,这些坑大部分都是开发者们反馈给我的,或者是到我这里吐槽过的。举几个典型的例子:
诸如此类的坑还有不少,我都是一个一个踩过来的。当然,我相信读者也能踩过来,但是从节约时间的角度来看,跟着我的思路走一遍岂不是更快?
这门课全部聚焦在使用层面上,覆盖日常开发中使用频率最高的特性,除非迫不得已,尽量不扯原理。长期以来,我发现有很多读者的学习方式存在误区,比如,有一些人上来就去研究“变更检测”的原理,还有 RxJS 的原理,这种方式除了打击你自己的自信心之外得不到任何好处。因为你迟早会发现,在计算机领域,任何东西研究到最底层都和“算法”、“数据结构”、“设计模式”有关。
据我所知,很多读者平时并没有去研究这些内容的基础知识,因此,我推荐采用更加务实一点的方案,首先学会如何使用,等用熟练了,有时间、有闲情的时候再去研究那些底层的原理。设计发动机很难,但是学会开车并不难,对吧?所以我写这门课的目标很简单,就是带你学会开车,而不是教你设计发动机。
这门课非常看重“概念模型”(Mental Model)的构建。我发现,很多开发者已经做过非常多的项目了,但是当你跟他聊的时候,很快就会发现他并没有掌握这门框架的精髓。打几个比方:
因此,可以看到,任何一个成功的框架都有自己独创的“概念模型”,或者叫“核心价值”也可以,这是框架本身存在的价值,这些核心概念是掌握这个框架应该紧扣的主线,而不是上来就陷入到茫茫的技术细节里面去。
课程里面涉及到的例子总数量大约有 300 个,有少量例子来自官方文档(大约 5 个),其他的例子都是我自己一点一点手动敲出来的。我把这些例子分成了 10 个开源项目,它们互相独立,方便读者进行参考和练习。这些教学用的开源项目本身是免费的,已放在了本课的末尾。
既然如此,问题就来了,新版本的 Angular 的核心概念是什么呢?
非常简单,一切都是围绕着“组件”(Component)的概念展开的。
因此,在这门课程里面,Component、NgModule、Router 加起来会占据绝大部分的篇幅,而一些琐碎的小特性会被忽略掉。我相信,读者只要紧扣“组件化”这个主线,就能站在一个很高的角度去统摄全局,从而掌握到这个框架的精髓。
本课程内容适合以下人群阅读:
特别注意:这门课程不是前端入门读物,读者至少需要会一门编程语言,无论前端还是后端都可以,如果你曾经使用过一门前端框架,那就更好了。
关于 Angular 的浏览器兼容性,请看下图:
有一些国内的开发者会来争论兼容 IE 8 的问题,请看下面的两个事实。
点击这里查看数据来源。
点击这里查看数据来源。
读者完全可以用上面的两点事实去说服客户,不值得为了这么少的市场份额付出那么多的研发和维护成本。
老版本使用 AngularJS 指代,所有新版本都叫做 Angular。原因很好理解,因为老版本是用 JS 开发的,所以带一个 JS 后缀,而新版本是基于 TypeScript 开发的,带 JS 后缀不合适。
这门课程不会单独讲 TypeScript,正如我一直强调的:TypeScript 不难,JavaScript 才难。你跟着我的思路,TypeScript 绝对不会成为你学习 Angular 的障碍。相反,一旦你写代码熟练了之后,TypeScript 可以非常有效地提升编码效率和程序可读性。
官方的版本发布计划是:
根据官方的解释,Angular 2.0 之后会保证向下兼容,只有在升级主版本的时候才会做一些 breaking change。因此,这门课程不再强调版本号,涉及到的所有实例代码都已经升级到了当前最新的 7.x 版本(2018-11)。
本课程划分 3 大部分,共计 48 篇(含导读)。
本系列文章对应的所有示例项目列表可点击这里查看。
最后是那一句套话:水平有限,错漏难免,欢迎指正。
点击了解更多《Angular 基础教程》
本课的主要内容:
2009 年,Node.js 发布了第一个版本,标志着前端开发正式告别了刀耕火种的原始状态,开始进入工业化时代。
在 Node.js 出现之前,前端开发领域有很多事情我们是做不到的,比如:
而这一切在 Node.js 出现之后都得到了很好的解决。
就前端开发目前整体的状态来说,无论使用什么框架,Node.js、Webpack、Sass、Karma + Jasmine、WebDriverJS 这个组合是无论如何绕不过去的。
在开发 Angular 应用的时候,当然也离不开大量基于 Node.js 的工具,我们需要 TypeScript Compiler、Webpack、Karma、Jasmine、Protracter 等模块。
有相关经验的开发者都知道,自己从头开始去搭建一套基于 Webpack 的开发环境是一件非常麻烦的事情,很多初学者在搭建环境这一步就消耗了过多的精力,导致学习热情受到了沉重的打击。
当团队规模比较大的时候,在每个人的机器上配置环境需要消耗大量的时间。有一些团队为了避开这个坑,利用 Docker 来做开发环境的同步和版本升级,看起来也是一个非常不错的方案。
Angular 项目组从一开始就注意到了这个问题,所以有了 Angular CLI 这个神器,它的底层基于 Webpack,集成了以上提到的所有 Node.js 组件,你只要安装好 Angular CLI 就够了,不需要自己从头一步一步安装那些 Node.js 插件。
当然,在安装 Angular CLI 之前需要先把 Node.js 安装好,请到官方网站(点击这里跳转到官方网站) 下载安装包,安装过程和普通软件没有区别。安装好 Node.js 之后就可以安装 Angular CLI 了,由于 npm 会自动访问海外的服务器,因而强烈推荐使用 cnpm 进行安装:
npm i -g cnpm --registry=https://registry.npm.taobao.orgcnpm i -g @angular/cli
cnpm 是淘宝发布的一款工具,会自动把 npm 上面的所有包定时同步到国内的服务器上来,cnpm 本身也是一款 Node.js 模块。
Angular CLI 安装成功之后终端里面将会多出一个名叫 ng 的命令,敲下 ng,将会显示完整的帮助文档:
我们来创建第一个入门项目 HelloAngular,请在终端里面运行如下命令:
ng new HelloAngular
@angular/cli 将会自动帮你把目录结构创建好,并且会自动生成一些模板化的文件,就像这样:
请特别注意:@angular/cli 在自动生成好项目骨架之后,会立即自动使用 npm 来安装所依赖的 Node 模块,因此这里我们要用组合键 Ctrl + C 终止掉它,然后自己进入项目的根目录,使用 cnpm 命令来进行安装。
安装完成之后,使用 ng serve 命令启动项目:
打开浏览器,访问默认的 4200 端口,若看到以下界面就说明环境 OK 了:
请注意以下几点:
ng 提供了很多非常好用的工具,除了可以利用 ng new 命令来自动创建项目骨架之外,它还可以帮助我们创建 Angular 里面所涉及到的很多模块,最常用的有以下几个。
更多的命令和参数请在终端里面输入 ng 命令仔细查看,尽快熟悉这些工具可以非常显著地提升编码效率。
@angular/cli 这种“全家桶”式的设计带来了很大的方便,同时也有一些读者不太喜欢,因为很多底层的东西被屏蔽掉了,开发者不能天马行空的自由发挥。比如,@angular/cli 把底层 Webpack 的配置文件屏蔽掉了,很多喜欢自己手动配 Webpack 的开发者就会感到很不爽。
对于国内的开发者来说,上面这些其实不是最重要的,国内开发者碰到的坑主要是由以下两点问题引起的:
因此,如果你的开发平台是 Windows,请特别注意以下几点。
如你所知,一直以来,前端开发领域并没有一款特别好用的开发和调试工具。
因此,Visual Studio Code(VS Code)才会呈现出爆炸性增长的趋势,它是微软开发的一款前端编辑器,完全开源免费。VS Code 底层是 Electron,界面本身是用 TypeScript 开发的。对于 Angular 开发者来说,当然要强烈推荐 VS Code。最值得一提的是,从 1.14 开始,可以直接在 VS Code 里面调试 TypeScript 代码。
请参照以上步骤打开 launch.json 配置文件。
请把本地 launch.json 文件里面的内容改成这样:
{ "version": "0.2.0", "configurations": [ { "type": "chrome", "request": "launch", "name": "Chrome", "url": "http://localhost:4200", "webRoot": "${workspaceRoot}" } ]}
在 app.component.ts 的构造函数里面打个断点,我本地是这样打断点的:
打开终端,进入项目根目录,运行 ng serve 启动项目,然后从 VS Code 的 debug 界面启动 Chrome:
注意,可能需要 F5 刷新一下 Chrome 才能进入断点!
市场上有大量的 VSCode 插件可供选择,比如彩虹缩进、智能提示、自动补齐标签之类的功能,将会大幅度提升开发效率,这里列出了 10 款我自己日常使用的插件供你参考,点击这里查看详情。
在真实的业务项目中,我们会用到大量的第三方开源组件,如图形库 ECharts、组件库 PrimeNG 等。
有很多开发者在引入这些组件库之后,没有注意到体积问题,导致最终编译出来的包体积过大,比如我自己的 OpenWMS 项目,以下是 build 出来的体积:
用 webpack-bundle-analyzer 分析之后可以看到各个模块在编译之后所占的体积:
可以看到,主要是因为 ECharts 和 PrimeNG 占的体积比较大,建议在使用的时候做一下异步,用不到的组件不要一股脑全部导入进来。
webpack-bundle-analyzer 的用法和详细文档 请点击这里查看。
目前,无论使用什么前端框架,都必然要使用到各种 Node.js 工具,Angular 也不例外。
与其他框架不同,Angular 从一开始走的就是“全家桶”式的设计思路,Angular CLI 这款工具里面集成了日常开发需要使用的所有 Node 模块,使用 @angular/cli 可以大幅度降低搭建开发环境的难度。
点击了解更多《Angular 基础教程》
几乎所有前端框架都在玩“组件化”,而且最近都不约而同地选择了“标签化”这种思路,Angular 也不例外。
对于新版本的 Angular 来说,一切都是围绕着“组件化”来展开的,组件是 Angular 的核心概念模型。
以下是一个最简单的 Angular 组件定义。
完整的实例代码请点击这里下载。
点击了解更多《Angular 基础教程》
阅读全文: http://gitbook.cn/gitchat/column/5bebdaf22c33167c317cc285