精湛 Angular 8.0.0 特性

前序:此文章由本人結(jié)合 anugular 官方Git 和 官網(wǎng)文檔整理而成,屬于原創(chuàng) (未經(jīng)授權(quán),禁止轉(zhuǎn)載)


2019.05,28 angular 團(tuán)隊(duì),將8.0.0版本發(fā)布到GitHub上面,詳細(xì)信息 點(diǎn)擊查看Git?,廢話不多說(shuō),趕緊說(shuō)內(nèi)容了

作為一個(gè)期待已久的重大版本更新 ,Angular 8 為框架、 Angular Material 和命令行界面工具?Angular CLI 帶來(lái)了大量的改進(jìn)和新功能。

核心優(yōu)化

某些元素(如<tr>或<col>)要求HTML規(guī)范的父元素屬于某種類型(例如,<tr>只能在<tbody>/中<thead>)。在此更改之前,Angular模板解析器使用以下規(guī)則自動(dòng)更正“無(wú)效”HTML:

<tr><tbody>如果不在里面就會(huì)被包裹<tbody>,<tfoot>或者<thead>;

<col><colgroup>如果不在里面就會(huì)被包裹起來(lái)<colgroup>。

這種自動(dòng)包裝/自動(dòng)糾正機(jī)制存在問(wèn)題,原因如下:

它是非顯而易見(jiàn)和任意的(例如,有更多的HTML元素具有父類型的規(guī)則);

如果<tr>/?<col>是組件內(nèi)容的根,則不正確,例如:

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

在上面的示例中,<projecting-tr-inside-tbody>組件可能會(huì)“驚訝”以查看<tbody>Angular HTML解析器插入的其他?元素。

特性一? ?新的渲染引擎 Ivy

作為新的渲染引擎,Ivy 旨在徹底縮減代碼尺寸并增強(qiáng)系統(tǒng)靈活性。

與目前的 Angular View Engine 相比,Ivy 具有以下優(yōu)勢(shì):

通過(guò) Angular 編譯器生成的代碼更具可讀性,更易調(diào)試 、更快的重建速度。

有效減少負(fù)載大小,瀏覽器用于下載和解析應(yīng)用程序的時(shí)間將更短

更好的模板類型檢查,以便在項(xiàng)目構(gòu)建初期就可捕獲更多 Bug,優(yōu)秀的向后兼容性。

特性二? ??動(dòng)態(tài)導(dǎo)入進(jìn)行路由配置

受 Vue 影響,angular 開(kāi)始采用 動(dòng)態(tài)路由配置,我們可以使用路由以延遲加載部分應(yīng)用程序,這是通過(guò)在路由配置中使用 loadChildren 鍵來(lái)實(shí)現(xiàn)的。

比如說(shuō)之前的寫(xiě)法是

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

現(xiàn)在可以

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

特性三? ?對(duì)?Web Worker 的支持

在 Angular 8 之前,使用 Web Worker 存在這樣的問(wèn)題:在 worker 中運(yùn)行的代碼不能與應(yīng)用程序的其余部分位于同一?

JavaScript 腳本文件中,它必須是分開(kāi)的。因此,對(duì)于曾經(jīng)希望借助 Angular CLI 等工具,自動(dòng)將 JavaScript 文件拆分、綁定

到更少文件夾下的效果往往不佳。簡(jiǎn)單來(lái)說(shuō)就是,開(kāi)發(fā)者可通過(guò) Web Worker 編寫(xiě)運(yùn)行在主線程之外的代碼。

特性四? 就是AngularJS 遷移

本人沒(méi)做過(guò)?AngularJS 的遷移,所以沒(méi)有過(guò)多的深入了解,如果有需要的童鞋,可以去社區(qū)查看文檔。

特性五? ?TypeScript 的支持

angular 8.0.0 版本還對(duì) typescript 進(jìn)行更新,添加對(duì)TypeScript 3.4的支持,并刪除舊的版本,加強(qiáng)了對(duì)類型的檢查和報(bào)錯(cuò)處

理。這里還特別針對(duì) VScode 和 Webstrom 做了優(yōu)化。

注意(不再支持TypeScript 3.1和3.2。請(qǐng)將TypeScript版本更新為3.4,因?yàn)榘姹?.3也不受支持。)

這里特別說(shuō)明對(duì) 路由器的修復(fù)。

1. 確保導(dǎo)航以當(dāng)前URL值開(kāi)始,跳過(guò)重定向.

2.??IE 11錯(cuò)誤可以在比較對(duì)象時(shí)破壞URL統(tǒng)一

3.?修復(fù)路由器沒(méi)有響應(yīng)后退按鈕的問(wèn)題

angular 8.0 0 版本更新列表

特征

添加對(duì)TypeScript 3.4的支持(并刪除舊版本)(#29372)(ef85336

common:通過(guò)onUrlChangehook?添加觀察AngularJS URL更新的能力(#30466)(8022d36

常見(jiàn):更嚴(yán)格的類型SlicePipe(#30156)(722b2fa

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

common:為$location相關(guān)API?添加@ angular / common / upgrade包(#30055)(152d99e

common:添加從Location服務(wù)中檢索狀態(tài)的功能(#30055)(b44b143

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

common:添加API以讀取URL的組件(#30055)(b635fe8

common:?add?MockPlatformLocation以啟用更強(qiáng)大的Location服務(wù)測(cè)試(#30055)(d0672c2

common:添加UrlCodec類型以用于升級(jí)應(yīng)用程序(#30055)(ec455e1

常見(jiàn):為AngularJS $位置服務(wù)提供替代品(#30055)(4277600

DOCUMENT從平臺(tái)瀏覽器中刪除已棄用的令牌(#28117)(3a9d247

編譯器:支持在模板源映射中跳過(guò)主要的瑣事(#30095)(304a12f

核心:將缺少的ARIA屬性添加到html清理程序(#29685)(909557d),關(guān)閉#26815

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

service-worker:允許在SW注冊(cè)時(shí)進(jìn)行配置(#21842)(4cfba58),關(guān)閉#20970

service-worker:公開(kāi)SwRegistrationOptions令牌以允許運(yùn)行時(shí)配置(#21842)(39c0152

service-worker:支持繞過(guò)具有特定標(biāo)頭/查詢參數(shù)的SW(#30010)(6200732),關(guān)閉#21191

compiler-cli:導(dǎo)出工具定義(#29929)(e1f51ea

compiler-cli:降低一些導(dǎo)出的表達(dá)式(#30038)(8e73f9b

核心:添加原理圖以移動(dòng)棄用DOCUMENT導(dǎo)入(#29950)(645e305

bazel:更新構(gòu)建以使用新的架構(gòu)師api(#29720)(902a53a

從@ angular / platform-server刪除@ angular / http依賴項(xiàng)(#29408)(9745f55

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

核心:添加AbstractType<T>界面(#29295)(afd4a4e),關(guān)閉#26491

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

bazel:升級(jí)rules_nodejs和rules_sass(#29388)(d6d081e

service-worker:支持域的不同子路徑上的多個(gè)應(yīng)用程序(#27080)(e721c08),關(guān)閉#21388

bazel:?Eject Bazel(#29167)(36a1550

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

表單:從FormArray中清除(刪除所有)組件(#28918)(a68b1a1),關(guān)閉#18531

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


Bug修復(fù)

bazel:允許ts_library與列表類型輸入互操作(#30600)(bf38df4

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

bazel:?ng test應(yīng)該運(yùn)行特定的ts_web_test_suite(#30526)(8bc4da8

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

核心:打字中查詢需要'靜態(tài)'標(biāo)志(#30641)(c8af830

核心:暫時(shí)刪除@deprecated?jsdoc標(biāo)簽以進(jìn)行TextBed.get重載(#30514)(561e01d),關(guān)閉#29290?29905

router:在比較對(duì)象時(shí),為IE 11錯(cuò)誤破壞URL統(tǒng)一正確輸入(#30464)(32daa93

bazel:直接產(chǎn)生本機(jī)Bazel二進(jìn)制文件(#30306)(d1fcc2b

bazel:在Windows中將正確的參數(shù)傳遞給http_server(#30346)(71eba45),關(guān)閉#29785

bazel:使用現(xiàn)有的npm /紗線鎖文件(#30438)(3136d9f

編譯器:在JIT中評(píng)估時(shí)確保嚴(yán)格模式(#30122)(192f108

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

核心:未正確打印靜態(tài)查詢遷移錯(cuò)誤(#30458)(fde3f46

core:靜態(tài)查詢遷移失敗,默認(rèn)參數(shù)值為(#30269)(c3246e6

核心:如果AOT編譯器拋出,則靜態(tài)查詢遷移應(yīng)該正常退出(#30269)(a71d8a8

核心:靜態(tài)查詢遷移應(yīng)該處理訪問(wèn)者的查詢(#30327)(dd299f9

核心:靜態(tài)查詢遷移不應(yīng)該回退到測(cè)試策略(#30458)(0fa48e8

核心:如果不使用查詢,則不應(yīng)提示靜態(tài)查詢遷移(#30254)(12fb639

核心:靜態(tài)查詢使用遷移策略應(yīng)該檢測(cè)不明確的查詢使用情況(#30215)(e295c6a

路由器:確保導(dǎo)航以當(dāng)前URL值開(kāi)始,跳過(guò)重定向(#30344)(9b88920),關(guān)閉#30340?#30160

路由器:?IE 11錯(cuò)誤可以在比較對(duì)象時(shí)破壞URL統(tǒng)一(30393)(c383491

bazel:對(duì)于Windows修復(fù)程序(#30196)(9f68c35)將ibazel壓縮為0.10.1

compiler-cli:?log ngcc跳過(guò)消息而不是info(#30232)(548b003

核心:在AOT中修復(fù)插值標(biāo)識(shí)符(#30243)(3fe3a84

路由器:確保history.state在eager更新模式下設(shè)置(#30154)(9720227

路由器:修復(fù)路由器沒(méi)有響應(yīng)后退按鈕的問(wèn)題(#30160)(132f01c

language-service:從匯總?cè)肿兞恐袆h除tsserverlibrary(#30123)(b706800

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

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

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

bazel:在ng中添加名稱參數(shù)可選(#30074)(0b5f480

bazel:確保只安裝了@ angular / bazel的單個(gè)副本(#30072)(2905bf5

bazel:ng_module中傳遞的npm deps(#30065)(61365a9

常見(jiàn):將升級(jí)子包添加到ng_package@ angular / common(#30117)(6de4cbd)的規(guī)則,關(guān)閉#30055?#30116

common:調(diào)整MockPlatformLocation以將狀態(tài)設(shè)置為新對(duì)象(#30055)(825efa8

編譯器:由于isSkipSelf為null(#30075)修復(fù)編譯器崩潰(28fd5ab

升級(jí):如果不破onMicrotaskEmpty發(fā)而$digest正在進(jìn)行中(#29794)(0ddf2e7),關(guān)閉#24680?/github.com/angular/angular/blob/78146c189/packages/core/src/util/ng_dev_mode.ts#L12?# 24680

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

bazel:恢復(fù)ng build --prod(#30005)(96a8289

常見(jiàn):防止重復(fù)應(yīng)用HttpParams突變(29045)(8e8e89a),關(guān)閉#20430

common:異步管道將在從observable(#22305)(3f6bf6d)收到NaN值時(shí)正確檢查,關(guān)閉#15721

核心:不包括本地打字EventListener(#29809)(4bde40f),關(guān)閉#29806

核心:使用可動(dòng)搖的全球定義(#29929)(e5905bb

語(yǔ)言服務(wù):使用適當(dāng)?shù)念愋投皇侨魏晤愋停?a target="_blank">#29942)(1a56cd5

bazel:ng add獨(dú)立調(diào)用后安裝包(#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:支持在最小應(yīng)用程序上運(yùn)行ng-add(#29681)(9810c6c),關(guān)閉#29680

常見(jiàn):添加@Injectable()到普通管道(#29834)(387fbb8

compiler-cli:確保LogicalProjectPaths始終以斜杠開(kāi)頭(#29627)(e02684e

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

核心:呼叫ngOnDestroy樹(shù)木可移動(dòng)的提供者(28943)(30b0442),關(guān)閉#28927

核心:棄用TestBed.get(...):any(#29290)(609024f),關(guān)閉#13785?#26491

核心:由于寬松的tsconfig解決ts編譯問(wèn)題(#29843)(54058ba

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

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

巴澤爾:使用//:tsconfig.json作為默認(rèn)ng_module(#29670)(b14537a

compiler-cli:?ngcc - 多次處理入口點(diǎn)(#29657)(6b39c9c

核心:靜態(tài)查詢?cè)韴D應(yīng)檢測(cè)getter中的靜態(tài)查詢。(#29609)(33016b8

common:錨點(diǎn)滾動(dòng)時(shí)使用的轉(zhuǎn)義查詢選擇器(#29577)(7671c73),關(guān)閉#28193

路由器:當(dāng)新導(dǎo)航取消現(xiàn)有導(dǎo)航時(shí)調(diào)整設(shè)置navigationTransition(#29636)(e884c0c),關(guān)閉#29389?#29590

bazel:允許ng_module用戶設(shè)置createExternalSymbolFactoryReexports(#29459)(21be0fb

bazel:從node_modules讀取摘要文件的解決方法問(wèn)題(#29459)(769d960

編譯器:當(dāng)類有一個(gè)沒(méi)有聲明參數(shù)并且委托起來(lái)的構(gòu)造函數(shù)時(shí)繼承param類型(#29232)(0007564

核心:將錯(cuò)誤的ML打開(kāi)標(biāo)記解析為文本(#29328)(dafbbf8),關(guān)閉#29231

核心:靜態(tài)查詢?cè)韴D應(yīng)檢測(cè)查詢ngDoCheck和ngOnChanges(#29492)(09fab58

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

bazel:對(duì)元數(shù)據(jù)中的自引用進(jìn)行正確的regexp測(cè)試(#29346)(9d090cb

bazel:不在元數(shù)據(jù)中產(chǎn)生自引用(#29317)(3facdeb),關(guān)閉#29315

bazel:修復(fù)嚴(yán)格的空檢查編譯錯(cuò)誤packages/bazel/src/schematics/ng-add/index.ts(#29282)(9a7f560

bazel:從dev依賴項(xiàng)中刪除@ angular / upgrade(#29319)(1db8bf3

bazel:支持新的e2e項(xiàng)目布局(#29318)(8ef690c

bazel:為ng_package關(guān)閉純粹的調(diào)用樹(shù)(#29210)(4990b93

compiler-cli:多個(gè)未命名的重新導(dǎo)出的錯(cuò)誤元數(shù)據(jù)包(#29360)(105cfaf

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

核心:將錯(cuò)誤的ML開(kāi)放標(biāo)記解析為文本(#29328)(4605df8),關(guān)閉#29231

bazel:為api-extractor添加缺少的二進(jìn)制路徑(#29202)(df354d1

bazel:?ng build應(yīng)該產(chǎn)生prod bundle(#29136)(14ce8a9

編譯器:確保模板在轉(zhuǎn)換輸出時(shí)更新(#29041)(c7e4931

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容