Angular5.0新特性

文章來自官網部分翻譯
https://blog.angular.io/version-5-0-0-of-angular-now-available-37e414935cedjavascript

Angular5.0.0版本已經正式發佈
java

1.構建優化
5.0版本默認採用CLI構建和打包。構建優化器是包含在CLI裏面的一個工具,經過對你的應用程序更加語義化的理解可使得你的打包程序(bundles)更小。
構建優化器有兩個主要工做。
第一,咱們能夠將應用程序的一部分標記爲純應用(pure),改進了現有工具提供的搖樹優化,刪除了應用中其它不須要的部分。
第二,從你的應用程序在運行時刪除裝飾符代碼(decorators),裝飾(decorators)是由編譯器使用的,而在運行時並不須要能夠被刪除。這些工做減小了生成的JavaScript bundles的大小,並增長了你的用戶應用程序的啓動速度。json

2.服務端狀態轉換和DOM支持
有了這個支持,可讓應用程序在服務器端和客戶端版之間共享狀態更容易。
Angular Universal是一個幫助開發者實現SSR的開源項目,經過在服務端渲染
Angular應用程序,而後在客戶端引導啓動程序並生成HTML,由此更好的支持那些對javascript不太友好的化境來提升應用程序性能。
5.0版本中,Angular開發團隊添加了ServerTransferStateModule(與之對應的BrowserTransferStateModule),這個模塊容許你在服務端生成模塊信息並傳輸到客戶端,不須要在客戶端重複建立。這一點在經過HTTP獲取數據並展現時很是有用。經過服務端狀態轉移,客戶端不須要在發送第二個HTTP數據請求,狀態轉移的API文檔將在將來幾周內發佈。
此處另外一個改變是AngularUniversal團隊添加了Domino渲染工具,Domino的加入意味着咱們在服務器端上下文中將能夠支持更多的DOM操做,改進了對第三方JS和組件庫的支持。bootstrap

3.編譯器改進
改進了Angular編譯器來支持增量編譯,從新構建變得更快,特別是對生產環境的構建和AOT編譯,加強的裝飾器能夠經過更精細化的去除空格來減少產生的包.
改進後的AOT編譯的性能大幅度,提高能夠節省約95%的構建時間,40s能夠提高至2s完成一次構建。
Preserve Whitespace
經過編譯器,模板開發中的製表符、換行符、空格等能夠原樣的保留下來,並提供選項能夠自選是否使用Preserve Whitespace來保留這些東西。瀏覽器


也能夠在tsconfig.json設置做用到全局


注:組件級別的選項會覆蓋應用程序級別的設置。
加強的裝飾符支持
裝飾符下降了在使用useValue、useFactory、data對lambda表達式的要求,開發者也可使用一個lamdba表示來代替一個已定義的命名函數,也就意味着你能夠不事先在*.d.ts中聲明而直接執行代碼。


去掉表達式方式

4.國際化號碼、日期和貨幣管道
Angular5中已經創建了新的號碼,日期和貨幣管道,增長了跨瀏覽器的標準化實現,消除國際化在不一樣環境中的差別。
在5.0中管道可使用咱們本身的實現,能夠在任何地方實現本地化的支持和配置。
V4 V5之間管道差別對比
https://docs.google.com/spreadsheets/d/12iygt-_cakNP1VO7MV9g4lq9NsxVWG4tSfc98HpHb0k/edit#gid=0bash

5.StaticInjector取代ReflectiveInjector依賴注入器
爲了更多的減小polyfills,5.0中使用了StaticInjector注入器來替換原有的ReflectiveInjector注入器,這種注入器再也不裏來與ReflectPolyfill,能夠大幅減小應用程序體積
在4.x中,依賴注入器一共有兩種,即Injector的抽象類子類:
1._NullInjector (該類的實例用於表示空的注入器)
2.ReflectiveInjector (表示一個依賴注入容器,用於實例化對象和解析依賴)服務器

以前提供依賴注入方式:
ReflectiveInjector.resolveAndCreate(providers);

5.0中方式:
Injector.create(providers);複製代碼

6.Zone執行速度的提高
5.0中默認提供的zones已經優化過,速度大幅提高,而且在應用程序中繞過zonee區域更加關於應用程序的性能。
繞過zone引導啓動應用程序的方式:async

platformBrowserDynamic().bootstrapModule(AppModule,{ngZone:'noop'}).then( ref => {} );複製代碼

7.exportAs
5.0中提供了組件/指令的多命名支持,在對用戶不修改代碼狀況下進行組件的遷移操做等很是有用,將一個組件導出多個名字,可讓組件已一個新名字來使用而達到不破壞現有代碼的目的。ide

8.HttpClient
在4.3中HttpClient模塊被封裝在@angular/common中,新的HttpClient被封裝在@angular/common/http中,更新Http模塊後,須要使用HttpClientModule替換原有HttpModule,並在使用http服務時,能夠去掉map(res=>res.json())的調用,新模塊中已經再也不須要這麼寫了。函數

9.CLI v1.5
Angular CLI v1.5版本中已經添加了對5.0版本的支持,後期將會把v5.0.0做爲CLI的默認版本。這個版本中已經默認開啓了構建優化,因此開發者能夠直接感覺到更小的js打包優化帶來的收益。同時也更新了.tsconfig將更嚴格的遵循TypeScript標準,

10.Angular Forms adds updateOn Blur / Submit
可使用blur/submit來進行事件更新,而不用每一個input都寫一個事件了。

Template Driven Forms
Before
<input name="firstName" ngModel>
After
<input name="firstName" ngModel [ngModelOptions]="{updateOn: 'blur'}">
or
<form [ngFormOptions]="{updateOn: 'submit'}">


Reactive Forms
Before
new FormGroup(value);
new FormControl(value, [], [myValidator])
After
new FormGroup(value, {updateOn: 'blur'}));
new FormControl(value, {updateOn: 'blur', asyncValidators: [myValidator]})
asyncValidators能夠再也不是做爲一個參數傳遞 而是直接做用到表單上了。複製代碼

11.RxJS 5.5
支持V5.2+ 5.5在bundle上更加優化了

12.New Router Lifecycle Events GuardsCheckStart ChildActivationStart ActivationStart GuardsCheckEnd ResolveStart ResolveEnd ActivationEnd ChildActivationEnd

相關文章
相關標籤/搜索