首頁 web前端 js教程 Angular 5.0 的特性介紹

Angular 5.0 的特性介紹

Dec 19, 2017 pm 05:15 PM
angular 介紹 特性

我們很高興地宣布Angular 5.0.0——五角形甜甜圈發布啦!這又是一個主版本,包含新功能並修復了許多bug。它再次體現了我們把Angular做得更小、更快、更好用的一貫目標。 Angular 5.0 來了! 有這些重大變化,這篇文章就為大家介紹了Angular 5.0大變化,感興趣的小伙伴們可以參考一下,希望能幫助到大家。


以下簡單介紹v5的重大變更。要了解詳情,請看changelog。

建置最佳化器

5.0.0開始,透過CLI執行的產品建置預設使用建置最佳化器。

建置優化器是CLI中的一個工具,它是基於我們對你Angular應用的理解,可以把建置後的套件變得更小。

建置最佳化器有兩個主要任務。首先,把你應用的某些部分標記為pure,以便原有工具利用它來改進「tree shaking」的最佳化效果,同時刪除應用程式中不必要的東西。

其次,建立優化器會從你的應用程式中刪除Angular裝飾器程式碼。裝飾器只有編譯器會用,執行時不用,可以刪除。上述兩項最佳化都可以減少產生JS套件的大小,同時加快應用程式啟動速度。

Angular Universal狀態轉交API及對DOM的支援

這樣更便於在服務端與客戶之間共用應用程式狀態。

Angular Universal是一個幫助開發者執行服務端渲染(SSR)的專案。服務端渲染產生的HTML對不支援JS的蜘蛛和爬蟲友好,同時有助於提升使用者感知效能。

在5.0.0中,開發團隊加入了ServerTransferStateModule及對應的BrowserTransferStateModule。這個模組可以幫開發者在服務端渲染產生的內容中加入相關訊息,然後傳送給客戶端,以避免重複產生。這對於透過HTTP取得資料的場景是很有用的。透過把狀態從伺服器傳送到客戶端,開發者就不用再發第二次HTTP請求了。狀態轉交的相關文件幾週後會發布。

Angular Universal團隊也把平台伺服器Domino加到​​了平台伺服器中。 Domino支援在伺服器端環境下更多的開箱即用的DOM操作,可以改善我們對非服務端第三方JS及元件庫的支援。

編譯器改進

為支援遞增編譯,我們改進了Angular編譯器。結果讓重新構建加快,特別是對產品建置和AOT構建,效果更明顯。我們還增強了裝飾器,透過刪除空白達到減少包裝大小的目的。

TypeScript轉換

現在,Angular編譯器底層的工作機制是TypeScript轉換,讓遞增式重新建置快了很多。 TypeScript轉換是TypeScript 2.3新增的特性,可以讓我們深入到標準TypeScript編譯管道。

在開啟AOT標籤的情況下,執行ng serve就可以利用上述機制。

ng serve --aot

建議大家都試試看。將來這個配置會成為CLI的預設值。許多專案都有效能問題,涉及上千組件,我們希望各種規模的專案都能從這些改進中受益。

在執行https://angular.io 的遞增AOT建置時,新編譯器管道可節省95%的建置時間(在我們開發機上測試的結果是從40多秒減少為不到2秒)。

我們的目標是讓AOT編譯快到能開發者用它開發的程度。現在,我們已經衝進了2秒以內,因此未來的CLI中可能會預設為開啟AOT。

作為向本次轉換過渡的一步,我們不再需要genDir,而outDir也改變了:現在,我們會把為套件產生的檔案都打到node_modules裡。

保留空白

過去編譯器會忠實地復現並在模板中包含製表符、換行符和空白。現在你可選擇是否在元件和應用程式中包含空白了。

可以在每個元件的裝飾器中指定這個配置,而目前的預設值為true。


@Component({
 templateUrl: 'about.component.html',
 preserveWhitespaces: false
}
export class AboutComponent {}
登入後複製

或也可以在tsconfig.json中進行全域配置,其中該項預設值也是true。


{
 "extends": "../tsconfig.json",
 "compilerOptions": {
  "outDir": "../out-tsc/app",
  "baseUrl": "./",
  "module": "es2015",
  "types": []
 },
 "angularCompilerOptions": {
  "preserveWhitespaces": false
 },
 "exclude": [
  "test.ts",
  "**/*.spec.ts"
 ]
}
登入後複製

一般規則是元件層級配置要覆寫應用程式層級配置。開發團隊打算將來把預設值改成false,預設為開發者節省空間。不要擔心你的

標籤,編譯器會智慧處理它們。 </p><p><strong>改進的裝飾器支援</strong></p><p>現在支援Lambda和物件字面量useValue、useFactory和data裝飾器中的表達式降級(expression lowering)。這樣可以使用只能在執行時間計算的裝飾器中被降級(lower)的值。 </p><p>因此現在可以不使用命名函數,而改用Lambda函數。換句話說,執行程式碼不會影響你的d.ts或你的外部API。 </p><p class="jb51code"><br/></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>Component({
 provider: [{provide: SOME_TOKEN, useFactory: () => null}]
})
export class MyClass {}
登入後複製

我们还会将表达式降级,作为useValue的一部分。


Component({
 provider: [{provide: SOME_TOKEN, useValue: SomeEnum.OK}]
})
export class MyClass {}
登入後複製

国际化的数值、日期和货币管道

我们写了新的数值、日期和货币管道,让跨浏览器国际化更方便,不需要再使用i18n的腻子脚本(polyfill)。

在以前版本的Angular中,我们一直依赖浏览器及其i18n API提供数值、日期和货币格式。为此,很多开发者都在使用腻子脚本(polyfill),而结果也不好。很多人反馈说一些常见的格式(如货币)不能做到开箱即用。

而在5.0.0中,我们把这个管道更新成了自己的实现,依赖CLDR提供广泛的地区支持,而且可配置。以下是我们对v4和v5所做的比较:a document comparing the pipe behavior between v4 and v5。

如果你还没条件使用新管理,可以导入DeprecatedI18NPipesModule以降级到旧的行为。

StaticInjector代替ReflectiveInjector

为了消除对更多腻子脚本(polyfill)的依赖,我们用StaticInjector代替了ReflectiveInjector。前者不再需要Reflect,为开发者减少了应用大小。

以前

ReflectiveInjector.resolveAndCreate(providers);

以后

Injector.create(providers);

提升Zone的速度

一方面提升了Zone的速度,另一方面也可以在特别关注性能的应用中绕过它。

若要绕过它,启动应用时加上noop:

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

这里有一个完整的例子:the example ng-component-state project。

exportAs

组件和指令中增加了对多名称的支持。这有助于用户实现无痛迁移。通过把指令导出为多个名称,可以在不破坏原有代码的情况下在Angular语法中使用新名称。Angular Material项目已经在其前缀迁移项目中用上了,对其他组件作者肯定也有用。

示例


@Component({
 moduleId: module.id,
 selector: &#39;a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab]&#39;,
 exportAs: &#39;matButton, matAnchor&#39;,
 .
 .
 .
}
登入後複製

HttpClient

v4.3在@angular/common中推出过HttpClient,用于在Angular中发送请求,它小巧易用。HttpClient受到了开发者的广泛赞誉,因此我们推荐在所有应用中使用它,放弃之前的@angular/http library。

要升级HttpClient,需要在每个模块的@angular/common/http中把HttpModule替换为HttpClientModule,注入HttpClient服务,删除所有map(res => res.json())。

CLI v1.5

从Angluar CLI v1.5开始,已经开始支持Angluar v5.0.0,默认生成v5项目。

在这次小版本升级中,我们默认打开了构建优化器,让开发者拿到更小的包。

我们还修改了使用.tsconfig文件的方式,以更严格地遵守TypeScript标准。此前,如果检测到延迟加载的路由,而且你在tsconfig.json中手工指定了一组files或include,那这些路由会自动化处理。而如今,根据TypeScript规范,我们不再这么干了。默认情况下,CLI对TypeScript的配置中没有files或include,因此多数开发者不会受影响。

Angular表单添加updateOn Blur/Submit

这样可以根据blur或submit来运行验证和更新值的逻辑了,不必再单纯依赖input事件。

表单对应用很重要,如果有服务端验证,或者验证或更新值会触发较慢的操作,你当然希望它少跑几次。现在你可以在控件层面控制验证和更新值的时机了,也可以在表单层面设置。

此外,你现在可以直接在选项中指定asyncValidators,而不是通过第三个参数指定。

模板驱动的表单

以前

以后


<input name="firstName" ngModel [ngModelOptions]="{updateOn: &#39;blur&#39;}">
登入後複製

或者


<form [ngFormOptions]="{updateOn:&#39;submit&#39;}">
登入後複製

反应式表单

以前


new FormGroup(value);
new FormControl(value, [], [myValidator])
登入後複製

以后


new FormGroup(value, {updateOn: &#39;blur&#39;}));
new FormControl(value, {updateOn: &#39;blur&#39;, asyncValidators: [myValidator]})
登入後複製

RxJS 5.5

我们已经把使用的RxJS更新到5.5.2或更高版本。这个新发布的RxJS可以让开发完全摆脱之前导入机制的副作用,因为我们以新的lettable operators的方式使用了RxJS。这些新操作符消除了副作用,以及之前导入操作符中“patch”方法存在代码切割和“tree shaking”等问题。

不再这样:


import { Observable } from &#39;rxjs/Observable&#39;;
import &#39;rxjs/add/operator/map&#39;;
import &#39;rxjs/add/operator/filter&#39;;
names = allUserData
.map(user => user.name)
.filter(name => name);
登入後複製

现在这样:


import { Observable } from &#39;rxjs/Observable&#39;;
import { map, filter } from &#39;rxjs/operators&#39;;
names = allUserData.pipe(
 map(user => user.name),
 filter(name => name),
);
登入後複製

此外,RxJS现在发行了一个使用ECMAScript Modules的版本。新Angular CLI会默认拉取这个新版本,让包大小有明显减小。如果你没使用Angular CLI,那还是应该指向这个新版本。相关文档在此:Build and Treeshaking。

新的路由器生成周期事件

我们给路由器添加了新的生命周期事件,让开发者可以跟踪running guard启动到激活完成的各个阶段。这些事件可在有子组件更新时,在一个特定的路由器出口上展示加载动画,或者测量性能。

新的事件(按顺序)是GuardsCheckStart、ChildActivationStart、ActivationStart、GuardsCheckEnd、ResolveStart、ResolveEnd、ActivationEnd、ChildActivationEnd。以下是一个使用这些事件启动和停止加载动画的示例:


class MyComponent {
 constructor(public router: Router, spinner: Spinner) {
  router.events.subscribe(e => {
   if (e instanceof ChildActivationStart) {
    spinner.start(e.route);
   } else if (e instanceof ChildActivationEnd) {
    spinner.end(e.route);
   }
  });
 }
}
登入後複製

如何更新

这里有Angular Update Guide,告诉你整个过程,以及更新前要做哪些事,还有更新应用的步骤,以及做好迎接Angular未来版本的准备等信息。

我们删除很多以前废弃的API(如OpaqueToken),也公布了一些新的废弃项。以上指南会详细介绍这些变更。

相关推荐:

详解Angular中支持SCSS的方法

Angular4表单响应功能示例分析

angularJS的一些用法

以上是Angular 5.0 的特性介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1658
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
wapi是什麼東西詳細介紹 wapi是什麼東西詳細介紹 Jan 07, 2024 pm 09:14 PM

wapi這個名詞使用者可能在使用網路得時候見過過,但是對於一部分人來說肯定都不知道wapi是什麼,下面就帶來了詳細介紹,幫助不知道小伙伴去了解。 wapi是什麼東西:答:wapi是無線區域網路鑑別和保密的基礎架構。這就像紅外線和藍牙等功能一樣,一般都覆蓋在辦公大樓等地方的附近。基本上都是為一個小部門所有的,所以這個功能涉及的範圍只有幾公里。 wapi相關介紹:1、wapi是無線區域網路裡面的一種傳輸協定。 2.這款技術是可以去避免窄頻帶通訊的問題,可以更好的去進行傳播。 3.只要只需要一個代碼就可以去傳送訊號了

詳解win11能否運行PUBG遊戲 詳解win11能否運行PUBG遊戲 Jan 06, 2024 pm 07:17 PM

pubg又稱絕地求生,是一款非常經典的射擊大逃殺類型遊戲,從2016年火爆以來一直擁有非常多的玩家。在最近的win11系統推出後,就有不少玩家想要在win11上游玩它,下面就跟著小編來看看win11是否可以玩pubg吧。 win11能玩pubg嗎:答:win11可以玩pubg。 1.在win11推出之初,因為win11需要開啟tpm的緣故,所以導致很多玩家被pubg封號處理了。 2.不過後來根據玩家的回饋,藍洞方面已經解決了這個問題,目前已經可以在win11中正常玩pubg了。 3.如果大家遇到了pub

如何在Ubuntu 24.04上安裝Angular 如何在Ubuntu 24.04上安裝Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

介紹最新的Win 11聲音調法方法 介紹最新的Win 11聲音調法方法 Jan 08, 2024 pm 06:41 PM

很多用戶更新了最新的win11之後發現自己系統的聲音有了些許的變化,但是又不知道該怎麼去進行調整,所以今天本站就給你們帶來了電腦最新win11聲音調法介紹,操作不難而且選擇多樣,快來一起下載試試吧。電腦最新系統windows11聲音如何調1、先右鍵點選桌面右下角的聲音圖標,並選擇「播放設定」。 2、然後進入設定中點選播放列中的「揚聲器」。 3、隨後點選右下方的「屬性」。 4.點選屬性中的「增強」選項列。 5.此時如果「禁用所有聲音效果」前的√勾上了就把他取消。 6、之後就可以選擇下面的聲音效果來進行設定並點

Angular元件及其顯示屬性:了解非block預設值 Angular元件及其顯示屬性:了解非block預設值 Mar 15, 2024 pm 04:51 PM

Angular框架中元件的預設顯示行為不是區塊級元素。這種設計選擇促進了元件樣式的封裝,並鼓勵開發人員有意識地定義每個元件的顯示方式。透過明確設定CSS屬性 display,Angular組件的顯示可以完全控制,從而實現所需的佈局和響應能力。

什麼是狗狗幣 什麼是狗狗幣 Apr 01, 2024 pm 04:46 PM

狗狗幣是一種基於網路迷因創建的加密貨幣,沒有固定的供應上限,交易時間快速,交易費用低,擁有龐大的迷因社群。用途包括小額交易、打賞和慈善捐贈。然而,其無限供應量、市場波動和作為笑話幣的地位也帶來風險和擔憂。什麼是狗狗幣?狗狗幣是一種基於網路迷因和笑話創建的加密貨幣。起源與歷史:2013年12月,兩位軟體工程師BillyMarkus和JacksonPalmer創立狗狗幣。靈感來自於當時流行的"Doge"模因,一個以一隻柴犬為特徵的滑稽照片加上破碎英語。特徵與優勢:無限供應量:與比特幣等其他加密貨

詳細介紹電腦中的印表機驅動程式位置 詳細介紹電腦中的印表機驅動程式位置 Jan 08, 2024 pm 03:29 PM

許多用戶在電腦上安裝了印表機驅動程序,但卻不知道如何找到它們。因此,今天我為大家帶來了詳細介紹印表機驅動程式在電腦中的位置,對於還不了解的用戶,快來看看吧印表機驅動在電腦哪裡找重新撰寫內容而不改變原義時,需要將語言改寫為中文,不需要出現原句首先,建議使用第三方軟體進行搜尋2、在右上角找到"工具箱"3、在下方找到並點選「裝置管理員」。改寫後的句子:3、在底部找到並點擊“裝置管理員”4、然後打開“列印佇列”,然後找到你的印表機裝置。此次是你的印表機名稱型號。 5.右鍵印表機設備,就能夠去更新或卸載我

PyCharm新手指南:取代功能全面解析 PyCharm新手指南:取代功能全面解析 Feb 25, 2024 am 11:15 AM

PyCharm是一款功能強大的Python整合開發環境,具有豐富的功能與工具,能夠大幅提升開發效率。其中,替換功能是開發過程中常用的功能之一,能夠幫助開發者快速修改程式碼並提高程式碼品質。本文將詳細介紹PyCharm的替換功能,並結合具體的程式碼範例,幫助新手更好地掌握和使用該功能。替換功能簡介PyCharm的替換功能可以幫助開發者在程式碼中快速替換指定的文本

See all articles