前序:此文章由本人结合 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)
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-browser:插入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)