精湛 Angular 8.0.0 特性

前序:此文章由本人结合 anugular 官方Git 和 官网文档整理而成,如有侵权,请联系本人,马上删除。


2019.05,28 angular 团队,将8.0.0版本发布到GitHub上面,详细信息 点击查看Git ,废话不多说,赶紧说内容了

作为一个期待已久的重大版本更新 ,Angular 8 为框架、 Angular Material 和命令行界面工具 Angular CLI 带来了大量的改进和新功能。

核心优化

某些元素(如<tr>或<col>)要求HTML规范的父元素属于某种类型(例如,<tr>只能在<tbody>/中<thead>)。在此更改之前,Angular模板解析器使用以下规则自动更正“无效”HTML:

<tr><tbody>如果不在里面就会被包裹<tbody>,<tfoot>或者<thead>;

<col><colgroup>如果不在里面就会被包裹起来<colgroup>。

这种自动包装/自动纠正机制存在问题,原因如下:

它是非显而易见和任意的(例如,有更多的HTML元素具有父类型的规则);

如果<tr>/ <col>是组件内容的根,则不正确,例如:

< projection-tr-inside-tbody >  < tr > ... </ tr ></ projected-tr-inside-tbody >

在上面的示例中,<projecting-tr-inside-tbody>组件可能会“惊讶”以查看<tbody>Angular HTML解析器插入的其他 元素。

特性一   新的渲染引擎 Ivy

作为新的渲染引擎,Ivy 旨在彻底缩减代码尺寸并增强系统灵活性。

与目前的 Angular View Engine 相比,Ivy 具有以下优势:

通过 Angular 编译器生成的代码更具可读性,更易调试 、更快的重建速度。

有效减少负载大小,浏览器用于下载和解析应用程序的时间将更短

更好的模板类型检查,以便在项目构建初期就可捕获更多 Bug,优秀的向后兼容性。

特性二    动态导入进行路由配置

受 Vue 影响,angular 开始采用 动态路由配置,我们可以使用路由以延迟加载部分应用程序,这是通过在路由配置中使用 loadChildren 键来实现的。

比如说之前的写法是

{path: '/home', loadChildren: './home/home.module#HomeModule'},

现在可以

{path: `/home`, loadChildren:  ()=>  import(`./home/home.module`).then(m=> m.AdminModule)}

特性三   对 Web Worker 的支持

在 Angular 8 之前,使用 Web Worker 存在这样的问题:在 worker 中运行的代码不能与应用程序的其余部分位于同一 

JavaScript 脚本文件中,它必须是分开的。因此,对于曾经希望借助 Angular CLI 等工具,自动将 JavaScript 文件拆分、绑定

到更少文件夹下的效果往往不佳。简单来说就是,开发者可通过 Web Worker 编写运行在主线程之外的代码。

特性四  就是AngularJS 迁移

本人没做过 AngularJS 的迁移,所以没有过多的深入了解,如果有需要的童鞋,可以去社区查看文档。

特性五   TypeScript 的支持

angular 8.0.0 版本还对 typescript 进行更新,添加对TypeScript 3.4的支持,并删除旧的版本,加强了对类型的检查和报错处

理。这里还特别针对 VScode 和 Webstrom 做了优化。

注意(不再支持TypeScript 3.1和3.2。请将TypeScript版本更新为3.4,因为版本3.3也不受支持。)

这里特别说明对 路由器的修复。

1. 确保导航以当前URL值开始,跳过重定向.

2.  IE 11错误可以在比较对象时破坏URL统一

3. 修复路由器没有响应后退按钮的问题

angular 8.0 0 版本更新列表

特征

添加对TypeScript 3.4的支持(并删除旧版本)(#29372)(ef85336

common:通过onUrlChangehook 添加观察AngularJS URL更新的能力(#30466)(8022d36

常见:更严格的类型SlicePipe(#30156)(722b2fa

bazel:使用rbe_autoconfig()和新容器(#29336)(e562acc

common:为$location相关API 添加@ angular / common / upgrade包(#30055)(152d99e

common:添加从Location服务中检索状态的功能(#30055)(b44b143

common:添加跟踪所有位置更改的功能(#30055)(3a9cf3f

common:添加API以读取URL的组件(#30055)(b635fe8

common: add MockPlatformLocation以启用更强大的Location服务测试(#30055)(d0672c2

common:添加UrlCodec类型以用于升级应用程序(#30055)(ec455e1

常见:为AngularJS $位置服务提供替代品(#30055)(4277600

DOCUMENT从平台浏览器中删除已弃用的令牌(#28117)(3a9d247

编译器:支持在模板源映射中跳过主要的琐事(#30095)(304a12f

核心:将缺少的ARIA属性添加到html清理程序(#29685)(909557d),关闭#26815

router:弃用loadChildren:string(#30073)(c61df39

service-worker:允许在SW注册时进行配置(#21842)(4cfba58),关闭#20970

service-worker:公开SwRegistrationOptions令牌以允许运行时配置(#21842)(39c0152

service-worker:支持绕过具有特定标头/查询参数的SW(#30010)(6200732),关闭#21191

compiler-cli:导出工具定义(#29929)(e1f51ea

compiler-cli:降低一些导出的表达式(#30038)(8e73f9b

核心:添加原理图以移动弃用DOCUMENT导入(#29950)(645e305

bazel:更新构建以使用新的架构师api(#29720)(902a53a

从@ angular / platform-server删除@ angular / http依赖项(#29408)(9745f55

compiler-cli: ngcc - 使日志记录更具可配置性(#29591)(8d3d75e

核心:添加AbstractType<T>界面(#29295)(afd4a4e),关闭#26491

core: template-var-assignment更新原理图(#29608)(7c8f4e3

bazel:升级rules_nodejs和rules_sass(#29388)(d6d081e

service-worker:支持域的不同子路径上的多个应用程序(#27080)(e721c08),关闭#21388

bazel: Eject Bazel(#29167)(36a1550

bazel:在Bazel builder中隐藏Bazel文件(#29110)(7060d90

表单:从FormArray中清除(删除所有)组件(#28918)(a68b1a1),关闭#18531

platform-server:等待返回的BEFORE_APP_SERIALIZED承诺(#29120)(7102ea8


Bug修复

bazel:允许ts_library与列表类型输入互操作(#30600)(bf38df4

bazel:在Mac OS上禁用沙箱(#30460)(3de26a8

bazel: ng test应该运行特定的ts_web_test_suite(#30526)(8bc4da8

核心:删除已弃用的TestBed.deprecatedOverrideProviderAPI(#30576)(5a46f94

核心:打字中查询需要'静态'标志(#30641)(c8af830

核心:暂时删除@deprecated jsdoc标签以进行TextBed.get重载(#30514)(561e01d),关闭#29290 29905

router:在比较对象时,为IE 11错误破坏URL统一正确输入(#30464)(32daa93

bazel:直接产生本机Bazel二进制文件(#30306)(d1fcc2b

bazel:在Windows中将正确的参数传递给http_server(#30346)(71eba45),关闭#29785

bazel:使用现有的npm /纱线锁文件(#30438)(3136d9f

编译器:在JIT中评估时确保严格模式(#30122)(192f108

核心:迁移并不总是迁移所有文件(#30269)(e8ceae1

核心:未正确打印静态查询迁移错误(#30458)(fde3f46

core:静态查询迁移失败,默认参数值为(#30269)(c3246e6

核心:如果AOT编译器抛出,则静态查询迁移应该正常退出(#30269)(a71d8a8

核心:静态查询迁移应该处理访问者的查询(#30327)(dd299f9

核心:静态查询迁移不应该回退到测试策略(#30458)(0fa48e8

核心:如果不使用查询,则不应提示静态查询迁移(#30254)(12fb639

核心:静态查询使用迁移策略应该检测不明确的查询使用情况(#30215)(e295c6a

路由器:确保导航以当前URL值开始,跳过重定向(#30344)(9b88920),关闭#30340 #30160

路由器: IE 11错误可以在比较对象时破坏URL统一(30393)(c383491

bazel:对于Windows修复程序(#30196)(9f68c35)将ibazel压缩为0.10.1

compiler-cli: log ngcc跳过消息而不是info(#30232)(548b003

核心:在AOT中修复插值标识符(#30243)(3fe3a84

路由器:确保history.state在eager更新模式下设置(#30154)(9720227

路由器:修复路由器没有响应后退按钮的问题(#30160)(132f01c

language-service:从汇总全局变量中删除tsserverlibrary(#30123)(b706800

禁用可注射管道迁移(#30180)(4b2fcfd

bazel:在metadata.tsconfig.json中删除 common / upgrade *(#30133)(6711f22

bazel:更新peerDep范围(#30155)(6067583

bazel:在ng中添加名称参数可选(#30074)(0b5f480

bazel:确保只安装了@ angular / bazel的单个副本(#30072)(2905bf5

bazel:ng_module中传递的npm deps(#30065)(61365a9

常见:将升级子包添加到ng_package@ angular / common(#30117)(6de4cbd)的规则,关闭#30055 #30116

common:调整MockPlatformLocation以将状态设置为新对象(#30055)(825efa8

编译器:由于isSkipSelf为null(#30075)修复编译器崩溃(28fd5ab

升级:如果不破onMicrotaskEmpty发而$digest正在进行中(#29794)(0ddf2e7),关闭#24680 /github.com/angular/angular/blob/78146c189/packages/core/src/util/ng_dev_mode.ts#L12 # 24680

bazel:不要检查核心原理图文件(#29876)(2ba799d

bazel:恢复ng build --prod(#30005)(96a8289

常见:防止重复应用HttpParams突变(29045)(8e8e89a),关闭#20430

common:异步管道将在从observable(#22305)(3f6bf6d)收到NaN值时正确检查,关闭#15721

核心:不包括本地打字EventListener(#29809)(4bde40f),关闭#29806

核心:使用可动摇的全球定义(#29929)(e5905bb

语言服务:使用适当的类型而不是任何类型(#29942)(1a56cd5

bazel:ng add独立调用后安装包(#29852)(bd2ce9c

compiler-cli:将配置路径传递给ts.parseJsonConfigFileContent(#29872)(86a3f90

router:支持loadChildren类型中的非NgFactory承诺(#29832)(2bfb6a0

bazel:添加configuration_env_vars = ["compile"]到生成@npm//@angular/bazel/bin:ngc-wrappednodejs_binary(#29694)(2e66ddf

bazel: docs formatting(#29817)(cc2e4b6

bazel:从ts_web_test_suite(#29695)中移除karma-jasmine (2bd9214

bazel:支持在最小应用程序上运行ng-add(#29681)(9810c6c),关闭#29680

常见:添加@Injectable()到普通管道(#29834)(387fbb8

compiler-cli:确保LogicalProjectPaths始终以斜杠开头(#29627)(e02684e

核心:添加缺少的迁移到npm包(#29705)(96b76dc

核心:呼叫ngOnDestroy树木可移动的提供者(28943)(30b0442),关闭#28927

核心:弃用TestBed.get(...):any(#29290)(609024f),关闭#13785 #26491

核心:由于宽松的tsconfig解决ts编译问题(#29843)(54058ba

platform-b​​rowser:插入APP_ID样式,contentAttr和hostAttr(#17745)(712d60e

bazel:更新原理图以支持路由(#29548)(401b8ee

巴泽尔:使用//:tsconfig.json作为默认ng_module(#29670)(b14537a

compiler-cli: ngcc - 多次处理入口点(#29657)(6b39c9c

核心:静态查询原理图应检测getter中的静态查询。(#29609)(33016b8

common:锚点滚动时使用的转义查询选择器(#29577)(7671c73),关闭#28193

路由器:当新导航取消现有导航时调整设置navigationTransition(#29636)(e884c0c),关闭#29389 #29590

bazel:允许ng_module用户设置createExternalSymbolFactoryReexports(#29459)(21be0fb

bazel:从node_modules读取摘要文件的解决方法问题(#29459)(769d960

编译器:当类有一个没有声明参数并且委托起来的构造函数时继承param类型(#29232)(0007564

核心:将错误的ML打开标记解析为文本(#29328)(dafbbf8),关闭#29231

核心:静态查询原理图应检测查询ngDoCheck和ngOnChanges(#29492)(09fab58

路由器:支持NgFactoryloadChildren中的承诺(#29392)(26a8c59

bazel:对元数据中的自引用进行正确的regexp测试(#29346)(9d090cb

bazel:不在元数据中产生自引用(#29317)(3facdeb),关闭#29315

bazel:修复严格的空检查编译错误packages/bazel/src/schematics/ng-add/index.ts(#29282)(9a7f560

bazel:从dev依赖项中删除@ angular / upgrade(#29319)(1db8bf3

bazel:支持新的e2e项目布局(#29318)(8ef690c

bazel:为ng_package关闭纯粹的调用树(#29210)(4990b93

compiler-cli:多个未命名的重新导出的错误元数据包(#29360)(105cfaf

芯:不裹<tr>和<col>要素引入所需亲(#29219)(f2dc32e

核心:将错误的ML开放标记解析为文本(#29328)(4605df8),关闭#29231

bazel:为api-extractor添加缺少的二进制路径(#29202)(df354d1

bazel: ng build应该产生prod bundle(#29136)(14ce8a9

编译器:确保模板在转换输出时更新(#29041)(c7e4931

转载于:https://www.jianshu.com/p/fd0a7e7e85c0

猜你喜欢

转载自blog.csdn.net/weixin_34292402/article/details/91231069