目录
支持 TypeScript 3.9.x
可选的严格设置
新的TypeScript配置结构
NGCC
新的默认浏览器配置
Bazel
@angular-devkit/build-angular 0.1000.0)
更多
增量式模板类型检查
CanLoad
I18N/L10N
Service Workers
Angular Material
大量的缺陷修复
废弃特性
不带Angular装饰器的class不再支持Angular的特性
ModuleWithProviders强制使用泛型
其他重大变更
迁移
总结
首页 web前端 js教程 一文带你深入解析Angular 10

一文带你深入解析Angular 10

May 26, 2021 am 11:17 AM
angular

本篇文章带你深入探索Angular 10。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

一文带你深入解析Angular 10

Angular的最新版本Angular 10刚发布了,我们看看有什么新特性!本文会详细讲新版本里所有值得一提的新特性,如果你想快速预览有哪些内容,可以前往Angular官方博客查看。

Angular 10 在 Angular 9 发布之后4个月就发了,相隔时间这么短,当然没有太多的变化,但这个版本还是有一些值得一提的新特性,以及修复了很多缺陷。顺便一提,Angular团队想要每年发布2个大版本,所以Angular 11应该会在今年秋季发布。【相关教程推荐:《angular教程》】

支持 TypeScript 3.9.x

作为一个热爱TypeScript的人,我认为这个版本最喜闻乐见的特性就是支持TypeScript 3.9.x!另一方面Angular 10放弃了对TS 3.6、3.7和 3.8的支持,希望不会成为你的障碍。基于编译CLI的升级和对TS3.9的支持,Angular 10 的类型检查比以往的版本都要快,这对于大多数项目来说是个好消息,尤其是大型项目。

除此之外,Angular 10还升级到了 TSLib 2.0。TSLib简单地说就是一个提供TypeScript运行时支持方法的官方库,它要结合“tsconfig.json”里的importHelpers标记生效,当importHelpers开启的时候,编译器可以生成更紧凑、更具可读性的代码。总之不用担心,TSLib没有太大变化。

可选的严格设置

严格模式为赢!

Angular 10 的严格模式使得我们可以在创建时就得到一个严格的项目,这是很好的做法,值得用在所有新项目上。运行下面的命名可以创建一个严格设置的项目:

ng new --strict
登录后复制

它可以让你更快地检测到问题的存在(在构建时发现问题总比运行时发现问题好,对吧)。这个新的option:

  • 开启TypeScript的严格模式(建议总是开启!),以及严格的Angular模板类型检测;

  • 大大降低了“angular.json”的空间预算,鼓励新用户关注应用打包的大小;

  • 强制使用更严格的TSLint配置,禁止使用“any”类型(“no-any”为true),还开启了codelyzer提供的几个有趣的规则。虽然这样做很严格,但TSLint可以让你走得更远。

我认为这个新的“strict”选项很棒,有点小可惜它只是个可选项而不是个默认选项。个人认为严格意味着更安全。如果你要创建新项目,建议使用严格模式哦。

新的TypeScript配置结构

新版本提供的默认TS配置有点变化,现在是同时提供了 “tsconfig.base.json” 、 “tsconfig.json”、“tsconfig.app.json” 和“tsconfig.spec.json”。

为什么要有这些配置文件?这是为了更好地支持IDE和构建工具查找类型和编译配置。新版里面,“tsconfig.json” 只包含TypeScript项目引用,这样可以提升编译时性能,而且更严格地隔离项目的不同部分: “tsconfig.app.json”管应用代码;“tsconfig.spec.json”管测试;“tsconfig.base.json” 里面的TypeScript配置只配置TypeScript编译器和Angular编译器选项,没有配置指定/排除编译哪些文件。那指定/排除编译哪些文件在哪里配置呢?答案是在“tsconfig.app.json”文件里面。

如果你现有的项目里没有用这个配置结构,最好检查下你的TypeScript配置以便保持一致。

NGCC

首先确保你的package.son文件里有postinstall脚本,在安装后执行NGCC。

在新版本里面,NGCC的可恢复性更强。放在以前,如果NGCC的某个工作进程崩了它不一定能恢复,现在应该没有这个问题了。此外NGCC还做了一些优化,包括性能相关的。

新的默认浏览器配置

Web浏览器发展迅速,Angular顺应潮流也更新了browserslist文件(.browserslistrc)。但正如官方博客里解释的那样,新配置带来了一个副作用,就是新项目默认禁用ES5构建。当然,现在生产ES5的代码已经没多少意义了,现代Web浏览器都至少支持ES2015了。如果你还在用IE浏览器,那就是时候告别过去了。

如果要获取具体支持的Web浏览器,可以在你的项目里执行下面的命令:

npx browserslist
登录后复制

它会基于根目录下的 “.browserslistrc” 文件输出结果。

Bazel

一个令人惋惜的消息:Angular Bazel已经离开Angular实验室了,所以Angular项目基本上不会再支持Bazel,Bazel再也不是Angular CLI的默认构建工具了。

@angular-devkit/build-angular 0.1000.0)

虽然这个包的命名很粗暴,但它包含了Angular应用构建的重要部分。最新版本的带来了几个很酷的特性:

  • 如果你用SASS,build-angular会重新定义资源的相对路径。之前的版本里,在样式文件里引用或导入 url(./foo.png) 这样的路径,都会保留准确的URL,当引入的样式文件不在同一个目录下的时候就会崩掉。现在所有使用相对资源的路径都能找到了。

  • build-angular可以去掉Webpack无法处理的重复模块,这是通过自定义Webpack解析插件实现的。

更多

增量式模板类型检查

新版的编译器CLI可以实现增量式模板类型检查。

CanLoad

以前,CanLoad guard 只能返回boolean值,现在可以返回 UrlTree 类型的值,匹配CanActivate 守卫的行为。注意,这不会影响预加载。

I18N/L10N

以前本地只能支持一个翻译文件。现在本地可以指定多个文件了,然后通过message id来合并。

Service Workers

默认的SwRegistrationStrategy有所优化。避免了之前可能会出现的 Service Worker从未注册的情况(比如有interval或递归timeout这样的长时间运行任务存在时)。

Angular Material

Angular Material 10 也跟着发布了,变化挺多的

大量的缺陷修复

Angular团队投入了大量的时间和精力去修复了积压的bug,解决了超过700个issue。

废弃特性

Angular打包格式不再支持ESM5/FESM5,因为构建过程的最后都会降级为ES5。如果你不用Angular CLI打包,你要自己想办法把Angular代码降级到es5。

IE 9、IE 10和移动端IE浏览器都不支持了。

以及一些废弃的元素,具体看官网博客。

不带Angular装饰器的class不再支持Angular的特性

直到Angular 9,你都可以在没有使用装饰器(比如 @Component,@Derective等)的类里面使用Angular的特性。Angular 10里面不行了,你必须加装饰器。如果你有用到组件继承,父子组件类里的其中一个没有加装饰器,就会有问题。

为什么要强制变更?简单来讲,Ivy编译器需要装饰器。

如果没有装饰器,Angular的编译器就不会添加依赖注入的额外代码。

如果父组件缺少了装饰器,那子类就会继承父类的constructor,但编译器不会生成对应的constructor信息(因为没装饰)。当Angular试图创建这个子类时,就没有正确的信息去创建了。在View引擎里面,编译器可以在全局范围里查找缺失的数据,但Ivy编译器会单独处理每个指令,这意味着更快的编译速度,但就没法像以前那样自动找到缺失的constructor信息了,只有显式添加装饰器才能提供这个信息。

如果子类缺少了装饰器,那它就会继承父类但是没有自己的装饰器,编译器也没法知道这个类是个@Derective还是个@Component,所以没法生成对应的指令信息。

这个变更带来的好处就是增强了Angular世界的一致性。如果你想用Angular特性,那就加上Angular装饰器。

ModuleWithProviders强制使用泛型

以前ModuleWithProviders也接受泛型,但不是强制的。NG 10里面,泛型参数是必需的,这样有利于类型安全。如果你遇到第三方库的报错:

error TS2314: Generic type &#39;ModuleWithProviders<T>&#39; requires 1 type argument(s).
登录后复制

建议联系作者修复,因为NGCC也没法处理。也可以先把skipLibChecks设为 false来跳过。

其他重大变更

  • Resolver:返回EMPTY的会取消导航,如果你想让导航顺利完成,必须保证resolver有返回值。
  • Service worker:依赖不同header的资源的Service worker实现跟之前不一样了,不同的header会被忽略。建建议避免缓存这样的资源,可能会引起user agent不可预测的行为。由此,即使资源的header不用也可以检。缓存匹配选项可以在VGSW的配置文件里面配置。
  • 属性绑定:比如[foo]=(bar$ | async).fubar这样,如果fubar的值跟之前一样,就不会触发变化检测。如果你想要触发变化检测,变通的方法就是让整个引用发生变化。
  • 时间日期格式化:formatDate()DatePipe 的格式化代码改了,之前的实现对于跨午夜的日期范围有问题
  • UrlMatcher背后的方法utility type现在的返回类似可以是null
  • ExpressionChangedAfterItHasBeenChecked 的报错新增了之前没检测到的场景
  • Angular日志:模板里的未知元素/属性绑定从以前的warning输出级别提升到error输出级别
  • 响应式表单:valueChanges 绑定到number类型的input时有个表单控制的bug,现在number的输入框不再监听change事件,而是监听input事件。记得修改你的测试样例。这个还打破了IE9的兼容性,不过也不影响了。
  • minLengthmaxLength验证器:它的值保证包含数值类型的length属性,以前没有length属性的falsy值会引起验证错误。

迁移

参考迁移指南:https://update.angular.io/#9.0:10.0l3

总结

此文探索了Angular 10的新特性、废弃特性,以及重大变更。尽管这个版本不是地震级的轰动发布,但也修复了很多缺陷,也带来很多宝藏。感谢Angular团队和社区!

原文地址:https://medium.com/javascript-in-plain-english/angular-10-in-depth-a48a3a7dd1a7

作者:Flavio Copes

译者:晓编

更多编程相关知识,请访问:编程视频!!

以上是一文带你深入解析Angular 10的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

聊聊Angular中的元数据(Metadata)和装饰器(Decorator) 聊聊Angular中的元数据(Metadata)和装饰器(Decorator) Feb 28, 2022 am 11:10 AM

本篇文章继续Angular的学习,带大家了解一下Angular中的元数据和装饰器,简单了解一下他们的用法,希望对大家有所帮助!

如何在Ubuntu 24.04上安装Angular 如何在Ubuntu 24.04上安装Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一种可自由访问的JavaScript平台,用于创建动态应用程序。它允许您通过扩展HTML的语法作为模板语言,以快速、清晰地表示应用程序的各个方面。Angular.js提供了一系列工具,可帮助您编写、更新和测试代码。此外,它还提供了许多功能,如路由和表单管理。本指南将讨论在Ubuntu24上安装Angular的方法。首先,您需要安装Node.js。Node.js是一个基于ChromeV8引擎的JavaScript运行环境,可让您在服务器端运行JavaScript代码。要在Ub

angular学习之详解状态管理器NgRx angular学习之详解状态管理器NgRx May 25, 2022 am 11:01 AM

本篇文章带大家深入了解一下angular的状态管理器NgRx,介绍一下NgRx的使用方法,希望对大家有所帮助!

如何使用PHP和Angular进行前端开发 如何使用PHP和Angular进行前端开发 May 11, 2023 pm 04:04 PM

随着互联网的飞速发展,前端开发技术也在不断改进和迭代。PHP和Angular是两种广泛应用于前端开发的技术。PHP是一种服务器端脚本语言,可以处理表单、生成动态页面和管理访问权限等任务。而Angular是一种JavaScript的框架,可以用于开发单页面应用和构建组件化的Web应用程序。本篇文章将介绍如何使用PHP和Angular进行前端开发,以及如何将它们

一文探究Angular中的服务端渲染(SSR) 一文探究Angular中的服务端渲染(SSR) Dec 27, 2022 pm 07:24 PM

你知道 Angular Universal 吗?可以帮助网站提供更好的 SEO 支持哦!

Angular + NG-ZORRO快速开发一个后台系统 Angular + NG-ZORRO快速开发一个后台系统 Apr 21, 2022 am 10:45 AM

本篇文章给大家分享一个Angular实战,了解一下angualr 结合 ng-zorro 如何快速开发一个后台系统,希望对大家有所帮助!

浅析angular中怎么使用monaco-editor 浅析angular中怎么使用monaco-editor Oct 17, 2022 pm 08:04 PM

angular中怎么使用monaco-editor?下面本篇文章记录下最近的一次业务中用到的 monaco-editor 在 angular 中的使用,希望对大家有所帮助!

浅析Angular中的独立组件,看看怎么使用 浅析Angular中的独立组件,看看怎么使用 Jun 23, 2022 pm 03:49 PM

本篇文章带大家了解一下Angular中的独立组件,看看怎么在Angular中创建一个独立组件,怎么在独立组件中导入已有的模块,希望对大家有所帮助!

See all articles