Angular 基础教程(7.0)

本教程详细介绍了Angular 7.0的基础知识,包括组件化的核心概念,适合Angular初学者和有经验的开发者。课程涵盖组件、模块、路由、服务、表单、依赖注入等多个关键特性,并通过实际项目实践帮助读者掌握Angular的日常开发。课程强调概念模型的构建,特别关注组件、模块和路由,帮助读者快速上手并深入理解Angular框架的精髓。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

课程亮点
  • 按照初学者的学习路线规划内容
  • 所有代码均采用 Angular 7.0 版本
  • 覆盖日常开发中使用频率最高的特性
  • To B、To C 型界面,移动端 PWA 全面覆盖
  • 附赠 3 个附录,对比 5.0、6.0、7.0 版本
读者反馈

《Angular 初学者快速上手教程》课程发布已有一年,期间收到了很多读者的留言,这里摘录几条,仅供参考。为了不打搅这些朋友,部分采用了匿名。

enter image description here

课程背景

本课程是 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》三本图书。

课程大纲

enter image description here

* 实际更新文章题目可能与框架略有出入
课程内容
开篇词:为什么会写 Angular 这门课

有的读者可能会问:Angular 相关的文章到处都有,我为什么要来学习这门课?

这是一个非常好的问题,说明读者对阅读内容有质量要求。

如果是我,我也会有这样的疑惑。

整体上说,这门课的内容有以下特色。

最近 5 年我一直在“玩”前端方面的东西,比如 jQuery、SVG、Ext JS、Adobe Flex、Angular;尤其在 2016 年,这一整年的时间我代表 Angular 项目组在中国进行技术推广。因此,我会按照初学者一般的学习过程,用我自己的语言一步一步进行讲解

在这 5 年里,我在超过 50 家企业、开源组织、大学里面进行了大量演讲,在网络上发布了大量的视频和文章。在到处奔波的过程中,认识了很多人,有经验丰富的后端开发者、也有新入行的初学者,他们跟我说过很多自己的困惑,我会把常见的一些疑问融入在内容里面

我也会扫平日常开发中常见的坑,这些坑大部分都是开发者们反馈给我的,或者是到我这里吐槽过的。举几个典型的例子:

  • 很多开发者到我这里来抱怨说,在 Windows 平台上安装 @angular/cli 会报很多 error,那是因为 @angular/cli 在 Windows 平台上面依赖 Python 和 Visual Studio 环境,而很多开发者的机器上并没有安装这些东西。为什么要依赖这些环境?因为某些 npm 包需要在你本地进行源码编译。
  • node-sass 模块被墙的问题,强烈推荐使用 cnpm 进行安装(点击这里跳转到安装地址),可以非常有效地避免撞墙。
  • 一些开发者来抱怨说 @angular/cli 在打包的时候加上 --prod 参数会报错,无法编译。这是一个很常见的问题,因为 @angular/cli 最新的版本经常会有 bug,只要在项目的 package.json 里面降低一个小版本号就 OK 了。另外,加 --prod 参数之后,编译器会进行更加严格的检查,如果存在无用的组件或者配置错误,则编译过不去。
  • @angular/cli 默认生成的 karma.conf.js 配置文件里面采用了一个有 bug 的 HTML 报告生成器,导致 ng test 运行报错,我们需要把这个 reporter 改成 mocha(摩卡),具体的配置和实例请参考“第10课:自动化测试”中的讲解。
  • 还有的开发者说,本地开发的时候运行得很好,上线之后所有请求 404。这也是一个常见的坑,因为你需要给 Web 容器配置一下处理 HTTP 请求的规则,把前端路由扔回去交给 Angular 处理,可点击这里查看具体的情况

诸如此类的坑还有不少,我都是一个一个踩过来的。当然,我相信读者也能踩过来,但是从节约时间的角度来看,跟着我的思路走一遍岂不是更快?

这门课全部聚焦在使用层面上,覆盖日常开发中使用频率最高的特性,除非迫不得已,尽量不扯原理。长期以来,我发现有很多读者的学习方式存在误区,比如,有一些人上来就去研究“变更检测”的原理,还有 RxJS 的原理,这种方式除了打击你自己的自信心之外得不到任何好处。因为你迟早会发现,在计算机领域,任何东西研究到最底层都和“算法”、“数据结构”、“设计模式”有关。

据我所知,很多读者平时并没有去研究这些内容的基础知识,因此,我推荐采用更加务实一点的方案,首先学会如何使用,等用熟练了,有时间、有闲情的时候再去研究那些底层的原理。设计发动机很难,但是学会开车并不难,对吧?所以我写这门课的目标很简单,就是带你学会开车,而不是教你设计发动机。

这门课非常看重“概念模型”(Mental Model)的构建。我发现,很多开发者已经做过非常多的项目了,但是当你跟他聊的时候,很快就会发现他并没有掌握这门框架的精髓。打几个比方:

  • 当有人提到 Spring 的时候,你的大脑里面第一个想到的一定是 DI、IoC、AOP 等这些核心概念;
  • 当有人提到 Hibernate、MyBatis、JPA 的时候,你的大脑里面立即会浮现出 ORM 等概念;
  • 当有人提到 React 的时候,你想到的应该是 VDOM、JSX;
  • 当有人提到 jQuery 的时候,你首先想到的应该是 $,对吧?

因此,可以看到,任何一个成功的框架都有自己独创的“概念模型”,或者叫“核心价值”也可以,这是框架本身存在的价值,这些核心概念是掌握这个框架应该紧扣的主线,而不是上来就陷入到茫茫的技术细节里面去。

课程里面涉及到的例子总数量大约有 300 个,有少量例子来自官方文档(大约 5 个),其他的例子都是我自己一点一点手动敲出来的。我把这些例子分成了 10 个开源项目,它们互相独立,方便读者进行参考和练习。这些教学用的开源项目本身是免费的,已放在了本课的末尾。

Angular 的概念模型

既然如此,问题就来了,新版本的 Angular 的核心概念是什么呢?

非常简单,一切都是围绕着“组件”(Component)的概念展开的。

86a9de10-e25f-11e8-aea1-e3c6bbbc3251

  • Component(组件)是整个框架的核心,也是终极目标。“组件化”的意义有 2 个:一是分治,因为有了组件之后,我们可以把各种逻辑封装在组件内部,避免混在一起;二是复用,封装成组件之后不仅可以在项目内部复用,而且还可以沉淀下来跨项目复用。
  • NgModule(模块)是组织业务代码的利器,按照自己的业务场景,把组件、服务、路由打包到模块里面,形成一个个的积木块,然后再用这些积木块来搭建出高楼大厦。
  • Router(路由)的角色也非常重要,它有 3 个重要的作用:一是封装浏览器的 History 操作;二是负责异步模块的加载;三是管理组件的生命周期。

因此,在这门课程里面,Component、NgModule、Router 加起来会占据绝大部分的篇幅,而一些琐碎的小特性会被忽略掉。我相信,读者只要紧扣“组件化”这个主线,就能站在一个很高的角度去统摄全局,从而掌握到这个框架的精髓。

适合阅读的人群

本课程内容适合以下人群阅读:

  • Angular 新版本的初学者
  • 有 AngularJS 经验的开发者
  • 希望了解 Angular 新版本核心特性的开发者
  • Java 和 .NET 开发者,会发现 Angular 里面的很多概念和做法非常适合已经掌握了那些概念模型的开发者,学起来会非常快

特别注意:这门课程不是前端入门读物,读者至少需要会一门编程语言,无论前端还是后端都可以,如果你曾经使用过一门前端框架,那就更好了。

集中回答一些常见的问题

浏览器兼容性

关于 Angular 的浏览器兼容性,请看下图:

enter image description here

有一些国内的开发者会来争论兼容 IE 8 的问题,请看下面的两个事实。

  • 第一个事实:截至 2018 年 10 月底,Chrome 的全球市场份额已经接近 60.6%,Safari 占 14.85%,Firefox 占 5.01%,加起来已经占到 80.46%,真的没有那么多人用 IE 了。

enter image description here

点击这里查看数据来源

  • 第二个事实:天猫已经于 2016 年 4 月宣布放弃支持 IE 6、7、8 了。而根据百度流量研究院的统计,IE 8 目前的整体市场份额已经下降到了 9.31%。

enter image description here

点击这里查看数据来源

读者完全可以用上面的两点事实去说服客户,不值得为了这么少的市场份额付出那么多的研发和维护成本。

命名约定

老版本使用 AngularJS 指代,所有新版本都叫做 Angular。原因很好理解,因为老版本是用 JS 开发的,所以带一个 JS 后缀,而新版本是基于 TypeScript 开发的,带 JS 后缀不合适。

关于 TypeScript

这门课程不会单独讲 TypeScript,正如我一直强调的:TypeScript 不难,JavaScript 才难。你跟着我的思路,TypeScript 绝对不会成为你学习 Angular 的障碍。相反

### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值