SlideShare a Scribd company logo
1 of 39
An gu la r
User Group Taiwan
Angular 5 全新功能探索
多奇數位創意有限公司
技術總監 黃保翕 ( Will 保哥 )
部落格:http://blog.miniasp.com/
An gu la r
User Group Taiwan
Angular 5.0.0 (pentagonal-donut) CHANGELOG
• https://github.com/angular/angular/blob/master/CHANGELOG.md
Angular CLI 1.5 (Turing) Release Notes
• https://github.com/angular/angular-cli/releases/tag/v1.5.0
Version 5.0.0 of Angular Now Available
• https://blog.angular.io/version-5-0-0-of-angular-now-available-37e414935ced
Angular 5 升級攻略 (教學影片)
• https://www.facebook.com/will.fans/videos/1870546876307781/
查看版本資訊
• ng -v
Angular 與 Angular CLI 新版資訊
An gu la r
User Group Taiwan
Angular 5 升級攻略
https://www.facebook.com/will.fans/videos/1870546876307781/
An gu la r
User Group Taiwan
查詢目前 Angular 版本
• ng -v
查詢 @angular/core 最新版本編號
• npm show @angular/core@* version --json
修正 package.json 特定套件版號
• 將所有 @angular/* 套件版本修改為 "^5.0.0"
升級其他 Angular 5 相依套件
基本升級步驟
An gu la r
User Group Taiwan
升級 @angular/cli 到 1.5 以上版本
• npm install @angular/cli@1.5
升級 TypeScript 到 2.4 以上版本
• npm install typescript@2.4
升級 rxjs 到 5.5 以上版本
• npm install rxjs@5.5
升級 codelyzer 到 4 以上版本
• npm install codelyzer@4
重新安裝所有套件
• npm install
升級其他 Angular 5 相依套件
An gu la r
User Group Taiwan
Angular CLI 1.5 全新特性
An gu la r
User Group Taiwan
https://github.com/angular/angular-cli/wiki/new
ng new --help
ng new demo5 --routing
ng new demo5 --routing --minimal
ng new demo5 --routing --skip-test
ng new demo5 --routing --style scss
ng new demo5 --routing --skip-commit
ng new 預設建立 Angular 5.0.0 專案
An gu la r
User Group Taiwan
ng build --prod
ng build 預設啟用 Build Optimizer
An gu la r
User Group Taiwan
在 Angular CLI 1.4 時為實驗性功能
• ng build --prod --build-optimizer
Build Optimizer 有兩個主要任務
1. 標示所有 "pure" 的元件,以強化 tree shaking 效果
2. 移除所有用不到的 Angular Decorators 程式碼
大幅減少 bundle 過後的 JS 原始碼
• 不用特別修正程式碼,打包後的 JS 檔案直接比前版減少 15% ~ 30%
關於 Build Optimizer 的基本原理
An gu la r
User Group Taiwan
Angular CLI 1.4.9 + Angular 4.4.6
An gu la r
User Group Taiwan
Angular CLI 1.5.0 + Angular 5.0.0
An gu la r
User Group Taiwan
Angular 5 編譯器
An gu la r
User Group Taiwan
TypeScript 2.3 公開 Transformation API 技術
• http://blog.scottlogic.com/2017/05/02/typescript-compiler-api-revisited.html
Angular 編譯器改採 TS 的 Transform API 實現增量編譯
• 透過增量編譯的 AOT 建置,最高可縮減 95% 編譯時間
• 目前 ng serve 預設並沒有啟動 --aot 選項 (建議加上)
ng serve --aot
• 未來的 Angular CLI 版本,將會預設啟用 --aot 選項
大幅改進 AOT 編譯效能
An gu la r
User Group Taiwan
Angular 5 效能提升
An gu la r
User Group Taiwan
新的 Decorator 屬性: preserveWhitespaces
https://angular.io/api/core/Component#preserveWhitespaces
An gu la r
User Group Taiwan
src/tsconfig.app.json
修改 preserveWhitespaces 全域設定
An gu la r
User Group Taiwan
在 HTML 範本中保留特定標籤中的空白
An gu la r
User Group Taiwan
預設的情況下,Zone 會監聽所有的「非同步事件」
• DOM Events
• XMLHttpRequest (AJAX)
• Timers
如何調整 Zone 以提升效能
An gu la r
User Group Taiwan
修正 main.ts
platformBrowserDynamic()
.bootstrapModule(AppModule, {ngZone: 'noop'})
.then( ref => {} );
範例程式
• https://stackblitz.com/edit/ng-component-state
NG5 可以把整個 App 排除在 Zone 之外
An gu la r
User Group Taiwan
Angular 5 元件化技術
An gu la r
User Group Taiwan
三個內建的 Pipes 元件已提供新版 (有破壞性更新)
• date
• number
• currency
Angular 5 不再使用 intl API (也不用再匯入 Polyfills 了)
• 以前這些 Pipes 非常依賴瀏覽器的 intl API 實作
• 不支援 intl 的瀏覽器就要載入 Polyfills 但卻導致結果不如預期
• Angular 5 重新製作一套以 CLDR 為主的 i18n 支援
• comparing the pipe behavior between v4 and v5
詳細的變更紀錄
• https://github.com/angular/angular/blob/master/CHANGELOG.md#i18n-pipes
全新的國際化 Pipes 元件 (intl)
An gu la r
User Group Taiwan
匯入 DeprecatedI18NPipesModule 模組即可 (範例)
若要繼續使用舊的 Pipes 元件
An gu la r
User Group Taiwan
Angular 5 已經標示淘汰 Http 元件,下個版本可能會移除
建議使用新的 HttpClient 服務元件 (Angular 4.3+)
• 範例:https://stackblitz.com/edit/angular-http-client
升級方式
• app.module.ts
• 將 @angular/http 修改為 @angular/common/http
• 將 HttpModule 修改為 HttpClientModule
• 建構式注入 HttpClient 服務元件
• 改掉前版常用的 map(res => res.json()) 使用習慣 (不需要了)
請升級 Http 服務元件
An gu la r
User Group Taiwan
從範本取得 ngForm 物件實體
• <form name="form1" #f="ngForm">
以上 ngForm 就是從 "form" 這個 directive 匯出的名稱
Angular 5 支援多重 exportAs 名稱
exportAs 可以匯出多個名稱
An gu la r
User Group Taiwan
Angular 5 Universal
Server Side Rendering (SSR)
An gu la r
User Group Taiwan
不支援 Browser 端的 DOM 物件,造成許多第三方套件無法使用
• 例如:window、document、navigator、…
頁面開啟後 HttpClient 發出的 API 要求會在瀏覽器端重複呼叫一次!
• 也就是 Server 及 Client 端都會各呼叫一次
當 SSR 需要額外呼叫 API 時,網頁回應時間會拉長!
Angular CLI 沒有自動產生 SSR 相關檔案的功能
• 快有了:https://github.com/angular/devkit/pull/254
早期 Angular SSR 常見的問題
An gu la r
User Group Taiwan
加入了 Domino 到 platform-server
• Server-side DOM impl. based on Mozilla's dom.js
支援在伺服器端可以直接呼叫與執行 DOM 的 API
• 可以更順利地呼叫第三方函式庫
支援伺服器端 DOM 介面實作
An gu la r
User Group Taiwan
保存伺服器狀態的模組
• ServerTransferStateModule
取得伺服器狀態的模組
• BrowserTransferStateModule
範例程式:https://github.com/evertonrobertoauler/universal-demo-v5
git clone https://github.com/evertonrobertoauler/universal-demo-v5.git
cd universal-demo-v5
npm install
npm run build
node dist/server.js
更輕易從 Server 傳遞狀態到用戶端
An gu la r
User Group Taiwan
Angular 5 表單功能
An gu la r
User Group Taiwan
控制表單資料繫結/驗證的時間點
• 預設事件
• change
• 新增事件
• blur
• submit
支援 Reactive Forms 控制項選項中設定 asyncValidators
Angular 5 表單功能
An gu la r
User Group Taiwan
早期的寫法
• <input name="firstName" ngModel>
新版的寫法
• <input name="firstName" ngModel
[ngModelOptions]="{updateOn: 'blur'}">
• <form
[ngFormOptions]="{updateOn: 'submit'}">
設定 Template Driven Forms 更新時機
An gu la r
User Group Taiwan
早期的寫法
• new FormGroup(value);
• new FormControl(value, [], [myValidator])
新版的寫法
• new FormGroup(value, {
updateOn: 'blur'
});
• new FormControl(value, {
updateOn: 'blur',
asyncValidators: [myValidator]
})
設定 Reactive Forms 更新時機
An gu la r
User Group Taiwan
Angular 5 其他增強
An gu la r
User Group Taiwan
採用全新的 lettable operators 可以大幅解決 side effects
大大增加 code splitting / tree shaking 的功效!
參考資料:Build and Treeshaking
支援 RxJS 5.5
早期寫法 新版寫法
An gu la r
User Group Taiwan
以下為全新的路由事件 (依照順序執行)
• GuardsCheckStart
• ChildActivationStart
• ActivationStart
• GuardsCheckEnd
• ResolveStart
• ResolveEnd
• ActivationEnd
• ChildActivationEnd
完整版事件執行順序:https://angular.io/api/router/Event
全新的路由生命週期事件
An gu la r
User Group Taiwan
全新的路由生命週期事件 (範例程式)
An gu la r
User Group Taiwan
Version 5.0.0 of Angular Now Available – Angular Blog
5.0.0 pentagonal-donut (2017-11-01)
Release 1.5 – Turing · angular/angular-cli
Angular 5 升級攻略 (影片)
Angular Update Guide
Angular Universal: server-side rendering
ASP.NET Core 2.0 & Angular 5 (+) advanced starter
相關連結
An gu la r
User Group Taiwan
Thank you
An gu la r
User Group Taiwan
The Will Will Web
記載著 Will 在網路世界的學習心得與技術分享
• http://blog.miniasp.com/
Will 保哥的技術交流中心 (臉書粉絲專頁)
• http://www.facebook.com/will.fans
Will 保哥的噗浪
• http://www.plurk.com/willh/invite
Will 保哥的推特
• https://twitter.com/Will_Huang
聯絡資訊

More Related Content

What's hot

NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 

What's hot (20)

KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢
 
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
 
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
solr勉強会資料
solr勉強会資料solr勉強会資料
solr勉強会資料
 
マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
SharePoint 開発入門
SharePoint 開発入門SharePoint 開発入門
SharePoint 開発入門
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
ストリーム処理勉強会 大規模mqttを支える技術
ストリーム処理勉強会 大規模mqttを支える技術ストリーム処理勉強会 大規模mqttを支える技術
ストリーム処理勉強会 大規模mqttを支える技術
 
ZabbixによるAWS監視のコツ
ZabbixによるAWS監視のコツZabbixによるAWS監視のコツ
ZabbixによるAWS監視のコツ
 
KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較
 
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
 
そろそろ押さえておきたい AngularJSのセキュリティ
そろそろ押さえておきたい AngularJSのセキュリティそろそろ押さえておきたい AngularJSのセキュリティ
そろそろ押さえておきたい AngularJSのセキュリティ
 
Spring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシングSpring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシング
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べた
 

Similar to Angular 5 全新功能探索 @ JSDC2017

Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
q3boy
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
bj_qa
 
企業導入 Angular 作為前端開發的好處
企業導入 Angular 作為前端開發的好處企業導入 Angular 作為前端開發的好處
企業導入 Angular 作為前端開發的好處
Oomusou Xiao
 

Similar to Angular 5 全新功能探索 @ JSDC2017 (20)

Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)
 
Better use angular
Better use angularBetter use angular
Better use angular
 
Schematics 實戰
Schematics 實戰Schematics 實戰
Schematics 實戰
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
 
Angular 4 新手入門攻略完全制霸
Angular 4 新手入門攻略完全制霸Angular 4 新手入門攻略完全制霸
Angular 4 新手入門攻略完全制霸
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)
 
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发
 
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用
 
台灣 AngularJS 社群小聚
台灣 AngularJS 社群小聚台灣 AngularJS 社群小聚
台灣 AngularJS 社群小聚
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
 
Swagger
SwaggerSwagger
Swagger
 
企業導入 Angular 作為前端開發的好處
企業導入 Angular 作為前端開發的好處企業導入 Angular 作為前端開發的好處
企業導入 Angular 作為前端開發的好處
 
Angular js twmvc#17
Angular js twmvc#17Angular js twmvc#17
Angular js twmvc#17
 
Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本
 
Ali-tomcat
Ali-tomcatAli-tomcat
Ali-tomcat
 
使用Eclipse自定义扩展点
使用Eclipse自定义扩展点使用Eclipse自定义扩展点
使用Eclipse自定义扩展点
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 

More from Will Huang

More from Will Huang (20)

深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
 
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧
 
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點
 
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
 
Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)
 
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)
 
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)
 
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 
以敏捷架構打造美國軟體外包專案的經驗談
以敏捷架構打造美國軟體外包專案的經驗談以敏捷架構打造美國軟體外包專案的經驗談
以敏捷架構打造美國軟體外包專案的經驗談
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
 
迎接嶄新的Windows容器叢集架構:Kubernetes
迎接嶄新的Windows容器叢集架構:Kubernetes迎接嶄新的Windows容器叢集架構:Kubernetes
迎接嶄新的Windows容器叢集架構:Kubernetes
 

Angular 5 全新功能探索 @ JSDC2017

  • 1. An gu la r User Group Taiwan Angular 5 全新功能探索 多奇數位創意有限公司 技術總監 黃保翕 ( Will 保哥 ) 部落格:http://blog.miniasp.com/
  • 2. An gu la r User Group Taiwan Angular 5.0.0 (pentagonal-donut) CHANGELOG • https://github.com/angular/angular/blob/master/CHANGELOG.md Angular CLI 1.5 (Turing) Release Notes • https://github.com/angular/angular-cli/releases/tag/v1.5.0 Version 5.0.0 of Angular Now Available • https://blog.angular.io/version-5-0-0-of-angular-now-available-37e414935ced Angular 5 升級攻略 (教學影片) • https://www.facebook.com/will.fans/videos/1870546876307781/ 查看版本資訊 • ng -v Angular 與 Angular CLI 新版資訊
  • 3. An gu la r User Group Taiwan Angular 5 升級攻略 https://www.facebook.com/will.fans/videos/1870546876307781/
  • 4. An gu la r User Group Taiwan 查詢目前 Angular 版本 • ng -v 查詢 @angular/core 最新版本編號 • npm show @angular/core@* version --json 修正 package.json 特定套件版號 • 將所有 @angular/* 套件版本修改為 "^5.0.0" 升級其他 Angular 5 相依套件 基本升級步驟
  • 5. An gu la r User Group Taiwan 升級 @angular/cli 到 1.5 以上版本 • npm install @angular/cli@1.5 升級 TypeScript 到 2.4 以上版本 • npm install typescript@2.4 升級 rxjs 到 5.5 以上版本 • npm install rxjs@5.5 升級 codelyzer 到 4 以上版本 • npm install codelyzer@4 重新安裝所有套件 • npm install 升級其他 Angular 5 相依套件
  • 6. An gu la r User Group Taiwan Angular CLI 1.5 全新特性
  • 7. An gu la r User Group Taiwan https://github.com/angular/angular-cli/wiki/new ng new --help ng new demo5 --routing ng new demo5 --routing --minimal ng new demo5 --routing --skip-test ng new demo5 --routing --style scss ng new demo5 --routing --skip-commit ng new 預設建立 Angular 5.0.0 專案
  • 8. An gu la r User Group Taiwan ng build --prod ng build 預設啟用 Build Optimizer
  • 9. An gu la r User Group Taiwan 在 Angular CLI 1.4 時為實驗性功能 • ng build --prod --build-optimizer Build Optimizer 有兩個主要任務 1. 標示所有 "pure" 的元件,以強化 tree shaking 效果 2. 移除所有用不到的 Angular Decorators 程式碼 大幅減少 bundle 過後的 JS 原始碼 • 不用特別修正程式碼,打包後的 JS 檔案直接比前版減少 15% ~ 30% 關於 Build Optimizer 的基本原理
  • 10. An gu la r User Group Taiwan Angular CLI 1.4.9 + Angular 4.4.6
  • 11. An gu la r User Group Taiwan Angular CLI 1.5.0 + Angular 5.0.0
  • 12. An gu la r User Group Taiwan Angular 5 編譯器
  • 13. An gu la r User Group Taiwan TypeScript 2.3 公開 Transformation API 技術 • http://blog.scottlogic.com/2017/05/02/typescript-compiler-api-revisited.html Angular 編譯器改採 TS 的 Transform API 實現增量編譯 • 透過增量編譯的 AOT 建置,最高可縮減 95% 編譯時間 • 目前 ng serve 預設並沒有啟動 --aot 選項 (建議加上) ng serve --aot • 未來的 Angular CLI 版本,將會預設啟用 --aot 選項 大幅改進 AOT 編譯效能
  • 14. An gu la r User Group Taiwan Angular 5 效能提升
  • 15. An gu la r User Group Taiwan 新的 Decorator 屬性: preserveWhitespaces https://angular.io/api/core/Component#preserveWhitespaces
  • 16. An gu la r User Group Taiwan src/tsconfig.app.json 修改 preserveWhitespaces 全域設定
  • 17. An gu la r User Group Taiwan 在 HTML 範本中保留特定標籤中的空白
  • 18. An gu la r User Group Taiwan 預設的情況下,Zone 會監聽所有的「非同步事件」 • DOM Events • XMLHttpRequest (AJAX) • Timers 如何調整 Zone 以提升效能
  • 19. An gu la r User Group Taiwan 修正 main.ts platformBrowserDynamic() .bootstrapModule(AppModule, {ngZone: 'noop'}) .then( ref => {} ); 範例程式 • https://stackblitz.com/edit/ng-component-state NG5 可以把整個 App 排除在 Zone 之外
  • 20. An gu la r User Group Taiwan Angular 5 元件化技術
  • 21. An gu la r User Group Taiwan 三個內建的 Pipes 元件已提供新版 (有破壞性更新) • date • number • currency Angular 5 不再使用 intl API (也不用再匯入 Polyfills 了) • 以前這些 Pipes 非常依賴瀏覽器的 intl API 實作 • 不支援 intl 的瀏覽器就要載入 Polyfills 但卻導致結果不如預期 • Angular 5 重新製作一套以 CLDR 為主的 i18n 支援 • comparing the pipe behavior between v4 and v5 詳細的變更紀錄 • https://github.com/angular/angular/blob/master/CHANGELOG.md#i18n-pipes 全新的國際化 Pipes 元件 (intl)
  • 22. An gu la r User Group Taiwan 匯入 DeprecatedI18NPipesModule 模組即可 (範例) 若要繼續使用舊的 Pipes 元件
  • 23. An gu la r User Group Taiwan Angular 5 已經標示淘汰 Http 元件,下個版本可能會移除 建議使用新的 HttpClient 服務元件 (Angular 4.3+) • 範例:https://stackblitz.com/edit/angular-http-client 升級方式 • app.module.ts • 將 @angular/http 修改為 @angular/common/http • 將 HttpModule 修改為 HttpClientModule • 建構式注入 HttpClient 服務元件 • 改掉前版常用的 map(res => res.json()) 使用習慣 (不需要了) 請升級 Http 服務元件
  • 24. An gu la r User Group Taiwan 從範本取得 ngForm 物件實體 • <form name="form1" #f="ngForm"> 以上 ngForm 就是從 "form" 這個 directive 匯出的名稱 Angular 5 支援多重 exportAs 名稱 exportAs 可以匯出多個名稱
  • 25. An gu la r User Group Taiwan Angular 5 Universal Server Side Rendering (SSR)
  • 26. An gu la r User Group Taiwan 不支援 Browser 端的 DOM 物件,造成許多第三方套件無法使用 • 例如:window、document、navigator、… 頁面開啟後 HttpClient 發出的 API 要求會在瀏覽器端重複呼叫一次! • 也就是 Server 及 Client 端都會各呼叫一次 當 SSR 需要額外呼叫 API 時,網頁回應時間會拉長! Angular CLI 沒有自動產生 SSR 相關檔案的功能 • 快有了:https://github.com/angular/devkit/pull/254 早期 Angular SSR 常見的問題
  • 27. An gu la r User Group Taiwan 加入了 Domino 到 platform-server • Server-side DOM impl. based on Mozilla's dom.js 支援在伺服器端可以直接呼叫與執行 DOM 的 API • 可以更順利地呼叫第三方函式庫 支援伺服器端 DOM 介面實作
  • 28. An gu la r User Group Taiwan 保存伺服器狀態的模組 • ServerTransferStateModule 取得伺服器狀態的模組 • BrowserTransferStateModule 範例程式:https://github.com/evertonrobertoauler/universal-demo-v5 git clone https://github.com/evertonrobertoauler/universal-demo-v5.git cd universal-demo-v5 npm install npm run build node dist/server.js 更輕易從 Server 傳遞狀態到用戶端
  • 29. An gu la r User Group Taiwan Angular 5 表單功能
  • 30. An gu la r User Group Taiwan 控制表單資料繫結/驗證的時間點 • 預設事件 • change • 新增事件 • blur • submit 支援 Reactive Forms 控制項選項中設定 asyncValidators Angular 5 表單功能
  • 31. An gu la r User Group Taiwan 早期的寫法 • <input name="firstName" ngModel> 新版的寫法 • <input name="firstName" ngModel [ngModelOptions]="{updateOn: 'blur'}"> • <form [ngFormOptions]="{updateOn: 'submit'}"> 設定 Template Driven Forms 更新時機
  • 32. An gu la r User Group Taiwan 早期的寫法 • new FormGroup(value); • new FormControl(value, [], [myValidator]) 新版的寫法 • new FormGroup(value, { updateOn: 'blur' }); • new FormControl(value, { updateOn: 'blur', asyncValidators: [myValidator] }) 設定 Reactive Forms 更新時機
  • 33. An gu la r User Group Taiwan Angular 5 其他增強
  • 34. An gu la r User Group Taiwan 採用全新的 lettable operators 可以大幅解決 side effects 大大增加 code splitting / tree shaking 的功效! 參考資料:Build and Treeshaking 支援 RxJS 5.5 早期寫法 新版寫法
  • 35. An gu la r User Group Taiwan 以下為全新的路由事件 (依照順序執行) • GuardsCheckStart • ChildActivationStart • ActivationStart • GuardsCheckEnd • ResolveStart • ResolveEnd • ActivationEnd • ChildActivationEnd 完整版事件執行順序:https://angular.io/api/router/Event 全新的路由生命週期事件
  • 36. An gu la r User Group Taiwan 全新的路由生命週期事件 (範例程式)
  • 37. An gu la r User Group Taiwan Version 5.0.0 of Angular Now Available – Angular Blog 5.0.0 pentagonal-donut (2017-11-01) Release 1.5 – Turing · angular/angular-cli Angular 5 升級攻略 (影片) Angular Update Guide Angular Universal: server-side rendering ASP.NET Core 2.0 & Angular 5 (+) advanced starter 相關連結
  • 38. An gu la r User Group Taiwan Thank you
  • 39. An gu la r User Group Taiwan The Will Will Web 記載著 Will 在網路世界的學習心得與技術分享 • http://blog.miniasp.com/ Will 保哥的技術交流中心 (臉書粉絲專頁) • http://www.facebook.com/will.fans Will 保哥的噗浪 • http://www.plurk.com/willh/invite Will 保哥的推特 • https://twitter.com/Will_Huang 聯絡資訊

Editor's Notes

  1. 設定 preserveWhitespaces 移除空白字元
  2. Angular 2 — Take Advantage Of The exportAs Property https://netbasal.com/angular-2-take-advantage-of-the-exportas-property-81374ce24d26
  3. Angular 5 universal with Transfer State using @angular/cli https://medium.com/@evertonrobertoauler/angular-5-universal-with-transfer-state-using-angular-cli-19fe1e1d352c