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里面,泛型参数是必需的,这样有利于类型安全。如果你遇到第三方库的报错:
1 |
|
建议联系作者修复,因为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的兼容性,不过也不影响了。
minLength
和maxLength
验证器:它的值保证包含数值类型的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的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
聊聊Angular指令中的prelink和postlink函数
更多相关阅读请进入《Angular》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者