AngularJS 開發實戰:重要的開發觀念與經驗分享 (COSCUP 2013)

Will Huang
Will Huang專業講師 at 多奇數位創意有限公司
1
AngularJS 開發實戰
多奇數位創意有限公司
技術總監 黃保翕 ( Will 保哥 )
部落格:http://blog.miniasp.com/
重要的開發觀念與經驗分享
All services from your imperative.
2
ANGULAR 執行生命週期
Angular Application Lifecycle
All services from your imperative.
3
啟動 AngularJS 的過程 (開機: bootstrap)
All services from your imperative.
4
執行 AngularJS 的流程 (執行時期)
All services from your imperative.
5
模組 (Modules) 與 注入器 (Injector)
All services from your imperative.
6
模組 (Modules) 與 注入器 (Injector)
 注入器 (Injector)
 是一個 service locator (服務物件尋找器)
 一個 ng-app 只會有一個 injector
 injector 負責維護一群內部服務物件快取
 每一個註冊在 injector 的物件都會有個名稱
 如果透過名稱找不到物件,會透過 instance
factory 自動建立
 模組 (Modules)
 一個設定注入器 instance factory 的管道
 http://docs.angularjs.org/api/AUTO.$provide
All services from your imperative.
7
使用 angular.module 配置執行環境
 透過 angular.module 宣告模組 (Module)
 配置 Angular 應用程式的唯一方法 (易於了
解)
 run(initializationFn)
 config(configFn)
 controller(name, constructor)
 directive(name, directiveFactory)
 filter(name, filterFactory)
 animation(name, animationFactory)
 constant(name, object)
All services from your imperative.
8
相依性注入
Dependency Injection
All services from your imperative.
9
了解與使用相依性注入
 建立物件相依性的三種方式
 透過 new 運算子
 透過全域變數 (根物件下的變數/屬性)
 要使用的時候自動注入 (相依性注入)
 何謂相依性注入 (Dependency Injection)
 一種抽象的執行過程,隱藏複雜的物件關係
 一種詭異的執行模式,自動注入其他元件
 e.g. config, controller, factory, directive, filter, run
All services from your imperative.
10
DI 範例:宣告 Angular 控制器建構式
 宣告控制器建構式
function MainCtrl($scope) {
$scope.name = 'Will';
}
 使用 MainCtrl 的方法
<div ng-controller="MainCtrl">
{{ name }}
</div>
All services from your imperative.
11
關於 Angular Services 物件
 採用獨體模式 (Singleton Pattern)
 取得服務物件後,會自動被快取!
 代表服務物件的程式碼都不會重複執行!
 採用相依性注入模式 (Dependency Injection)
 註冊為 Angular Services 的物件,都可以自動
注入到其他元件上
 管理元件與元件之間的相依性
 採用延遲載入模式 (Lazy Loading)
 只有在第一次使用時,才會建立服務實體
All services from your imperative.
12
建立 Angular Services 物件 (Providers)
 provider(name, providerType) 建立一個 provider 物件
 傳入一個含有 this.$get 方法的建構式
 factory(name, providerFunction) 建立一個 provider 物件
 傳入一個函式,然後會自動包進一個 $get 並建立 provider
 會透過 providerFunction.apply() 建立物件 ($injector.instantiate)
 service(name, constructor) 建立一個 provider 物件
 傳入一個建構式,建立物件實體後,透過 factory 包成一個 provider
 value(name, object) 建立一個 provider 物件
 傳入一個值,透過 factory 包成一個 provider
 constant(name, value)
 直接儲存於 providerCache 與 instanceCache 內部物件之中
 decorator(serviceName, decoratorFn)
 用來作為特定 service 的修飾函式,傳入 $delegate 為原先的服務實體
※ 比較 service & factory & provider 的差異
http://jsbin.com/oceyon/1/edit
All services from your imperative.
13
DI 範例 (1):宣告 Angular 控制器建構式
 宣告控制器建構式
function MainCtrl($scope) {
$scope.name = 'Will';
}
 使用 $inject 註釋語法 (optional)
MainCtrl.$inject = ['$scope', '$http'];
 目的:避免 JS 最小化帶來的影響!
All services from your imperative.
14
DI 範例 (2):透過 module 宣告物件
 宣告自訂模組
var app = angular.module('myApp', []);
 宣告控制器建構式
function MainCtrl($scope) {
$scope.name = 'Will';
}
 使用 $inject 註釋語法
 MainCtrl.$inject = ['$scope', '$http'];
 將控制器註冊進模組
 app.controller('MainCtrl', MainCtrl);
All services from your imperative.
15
DI 範例 (3):使用內置註釋語法
 宣告自訂模組
var app = angular.module('myApp', []);
 宣告控制器建構式
function MainCtrl(renamed$scope, renamed$http) {
renamed$scope.name = 'Will';
}
 將控制器註冊進模組
使用內置註釋語法 (Inline Annotation)
 app.controller('MainCtrl',
['$scope', '$http', MainCtrl]);
All services from your imperative.
16
可以使用 DI 的地方
angular.module('myModule', []).
controller('MyController', ['$scope', 'dep1', 'dep2', function($scope, dep1, dep2) {
}).
config(['depProvider', function(depProvider){
...
}]).
factory('serviceId', ['depService', function(depService) {
...
}]).
directive('directiveName', ['depService', function(depService) {
...
}]).
filter('filterName', ['depService', function(depService) {
...
}]).
run(['depService', function(depService) {
...
}]);
All services from your imperative.
17
ANGULAR 程式碼組織原則
How to code in the right way to the right place
All services from your imperative.
18
如何有效組織 Angular 程式碼與樣板
 Views / Templates
 所有的 Scope 物件都應該「唯讀」
 Angular Controllers
 所有的 Scope 物件都應該「唯寫」(讀也可以)
 不應該處理任何跟 DOM 有關的工作 (盡量啦)
 只負責跟 View 溝通
 Angular Services (e.g. factory, service, provider, …)
 不應該處理任何跟 DOM 有關的工作 (盡量啦)
 共於元件之間的資料時(包括控制器)
 只撰寫可以獨立運作的程式碼 (與View無關)
All services from your imperative.
19
如何有效組織 Angular 程式碼與樣板
 Angular Directives
 所有與 DOM 相關的工作,都應該寫在這裡
 Angular Filters
 只應該處理要被過濾的資料
 不應該處理任何跟 DOM 有關的工作
 Angular Config
 定義路由規則
 定義較為底層的 Angular 設定 (providers, …)
 不應該處理任何跟 DOM 有關的工作
All services from your imperative.
20
總結
 Angular 執行生命週期
 了解生命週期,降低除錯時間
 相依性注入
 了解注入邏輯,加快開發速度
 Angular 程式碼組織原則
 將程式碼寫對地方,可以讓你上天堂
All services from your imperative.
21
聯絡資訊
 The Will Will Web
記載著 Will 在網路世界的學習心得與技術分享
 http://blog.miniasp.com/
 Will 保哥的技術交流中心 (臉書粉絲專頁)
 http://www.facebook.com/will.fans
 ★ ★ ★ Will 保哥的噗浪 ★ ★ ★
 http://www.plurk.com/willh/invite
All services from your imperative.
22
Will 保哥的 YouTube 影音教學中心
 募集 1,000 位訂閱用戶 (使用直播功能)
1 of 22

Recommended

使用 Angular 2 與 Firebase 實現 Serverless 網站架構 (JSDC.tw 2016) by
使用 Angular 2 與 Firebase 實現 Serverless 網站架構 (JSDC.tw 2016)使用 Angular 2 與 Firebase 實現 Serverless 網站架構 (JSDC.tw 2016)
使用 Angular 2 與 Firebase 實現 Serverless 網站架構 (JSDC.tw 2016)Will Huang
6.5K views27 slides
使用 Visual Studio Code 建構 JavaScript 應用程式 by
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式Will Huang
15.3K views27 slides
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例 by
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
19.5K views28 slides
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016) by
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)Will Huang
10.7K views38 slides
Visual Studio 2017 新功能探索 (Study4.TW) by
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Will Huang
6.3K views59 slides
twMVC#01 | ASP.NET MVC 的第一次親密接觸 by
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC
5K views139 slides

More Related Content

Viewers also liked

DEV208 - ASP.NET MVC 5 新功能探索 by
DEV208 - ASP.NET MVC 5 新功能探索DEV208 - ASP.NET MVC 5 新功能探索
DEV208 - ASP.NET MVC 5 新功能探索Will Huang
6.5K views45 slides
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日) by
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)Will Huang
17.4K views50 slides
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇) by
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)Will Huang
13.4K views37 slides
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格 by
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格Will Huang
8.9K views19 slides
簡介 Git hub 平台 ( 1.5 hrs ) by
簡介 Git hub 平台 ( 1.5 hrs )簡介 Git hub 平台 ( 1.5 hrs )
簡介 Git hub 平台 ( 1.5 hrs )Will Huang
1.7K views14 slides
DEV305 - ASP.NET 5 開發攻略 by
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
6.1K views39 slides

Viewers also liked(19)

DEV208 - ASP.NET MVC 5 新功能探索 by Will Huang
DEV208 - ASP.NET MVC 5 新功能探索DEV208 - ASP.NET MVC 5 新功能探索
DEV208 - ASP.NET MVC 5 新功能探索
Will Huang6.5K views
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日) by Will Huang
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
Will Huang17.4K views
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇) by Will Huang
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)
HTML5 規格最新發展現況 (HTML5 趨勢發展與技術應用論壇)
Will Huang13.4K views
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格 by Will Huang
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
Will Huang8.9K views
簡介 Git hub 平台 ( 1.5 hrs ) by Will Huang
簡介 Git hub 平台 ( 1.5 hrs )簡介 Git hub 平台 ( 1.5 hrs )
簡介 Git hub 平台 ( 1.5 hrs )
Will Huang1.7K views
DEV305 - ASP.NET 5 開發攻略 by Will Huang
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang6.1K views
ASP.NET MVC 6 新功能探索 by Will Huang
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Will Huang11.5K views
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式 by Will Huang
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
Will Huang11.9K views
git merge 與 rebase 的觀念與實務應用 by Will Huang
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用
Will Huang20.7K views
ASP.NET MVC 5 新功能探索 by Will Huang
ASP.NET MVC 5 新功能探索ASP.NET MVC 5 新功能探索
ASP.NET MVC 5 新功能探索
Will Huang15.3K views
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具 by Will Huang
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
Will Huang7.3K views
你所不知道的 Microsoft Azure 雲端資源採購技巧 (2016 Azure 新春特惠方案) by Will Huang
你所不知道的 Microsoft Azure 雲端資源採購技巧 (2016 Azure 新春特惠方案)你所不知道的 Microsoft Azure 雲端資源採購技巧 (2016 Azure 新春特惠方案)
你所不知道的 Microsoft Azure 雲端資源採購技巧 (2016 Azure 新春特惠方案)
Will Huang5.7K views
Growth Mindset 經驗分享 by Will Huang
Growth Mindset 經驗分享Growth Mindset 經驗分享
Growth Mindset 經驗分享
Will Huang4.6K views
Visual Studio 2015 與 Git 開發實戰 by Will Huang
Visual Studio 2015 與 Git 開發實戰Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰
Will Huang15.7K views
ASP.NET 5 的創新與變革 by Will Huang
ASP.NET 5 的創新與變革ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革
Will Huang19.8K views
SQL Server 資料庫版本控管 by Will Huang
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
Will Huang9.4K views
保哥線上講堂:LINQ 快速上手 by Will Huang
保哥線上講堂:LINQ 快速上手保哥線上講堂:LINQ 快速上手
保哥線上講堂:LINQ 快速上手
Will Huang20.9K views
開發人員不可不知的 Windows Container 容器技術預覽 by Will Huang
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
Will Huang8.8K views
簡介 GitHub 平台 by Will Huang
簡介 GitHub 平台簡介 GitHub 平台
簡介 GitHub 平台
Will Huang7K views

More from Will Huang

深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2) by
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)Will Huang
553 views7 slides
ASP.NET Core 6.0 全新功能探索 by
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索Will Huang
2.6K views38 slides
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧! by
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!Will Huang
724 views15 slides
你一定不能不知道的 Markdown 寫作技巧 by
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧Will Huang
2K views31 slides
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020) by
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)Will Huang
2.8K views26 slides
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020) by
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)Will Huang
624 views15 slides

More from Will Huang(20)

深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2) by Will Huang
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
Will Huang553 views
ASP.NET Core 6.0 全新功能探索 by Will Huang
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
Will Huang2.6K views
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧! by Will Huang
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
Will Huang724 views
你一定不能不知道的 Markdown 寫作技巧 by Will Huang
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧
Will Huang2K views
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020) by Will Huang
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
Will Huang2.8K views
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020) by Will Huang
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
Will Huang624 views
Micro-frontends with Angular 10 (Modern Web 2020) by Will Huang
Micro-frontends with Angular 10 (Modern Web 2020)Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)
Will Huang727 views
從實戰經驗看到的 K8S 導入痛點 by Will Huang
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點
Will Huang3K views
RxJS 6 新手入門 by Will Huang
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門
Will Huang3.1K views
极速 Angular 开发:效能调校技巧 (ngChina 2019) by Will Huang
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
Will Huang2.3K views
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019) by Will Huang
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
Will Huang3.5K views
Protractor: The Hacker way (NG-MY 2019) by Will Huang
Protractor: The Hacker way (NG-MY 2019)Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)
Will Huang2.2K views
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization) by Will Huang
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
Will Huang1K views
Angular 开发技巧 (2018 ngChina 开发者大会) by Will Huang
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)
Will Huang3K views
Angular 7 全新功能探索 (Angular Taiwan 2018) by Will Huang
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)
Will Huang5.9K views
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay) by Will Huang
利用.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)
Will Huang1.4K views
AKS 與開發人員體驗 (Kubernetes 大講堂) by Will Huang
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)
Will Huang1.2K views
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018) by Will Huang
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
Will Huang4.4K views
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會) by Will Huang
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
Will Huang2.9K views
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018) by Will Huang
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
Will Huang5.4K views

Recently uploaded

居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班 by
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
43 views32 slides
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式 by
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式Shengyou Fan
151 views54 slides
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班 by
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
40 views37 slides
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班 by
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
43 views25 slides
AI Technology & Development of Civilization by
AI Technology & Development of CivilizationAI Technology & Development of Civilization
AI Technology & Development of Civilizationunclebrown017
44 views74 slides
Hacking Facebook for fun and profit by Pranav Hivarekar by
Hacking Facebook for fun and profit by Pranav HivarekarHacking Facebook for fun and profit by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav HivarekarPranav Hivarekar
6 views69 slides

Recently uploaded(6)

居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式 by Shengyou Fan
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan151 views
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
AI Technology & Development of Civilization by unclebrown017
AI Technology & Development of CivilizationAI Technology & Development of Civilization
AI Technology & Development of Civilization
unclebrown01744 views
Hacking Facebook for fun and profit by Pranav Hivarekar by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav HivarekarHacking Facebook for fun and profit by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav Hivarekar

AngularJS 開發實戰:重要的開發觀念與經驗分享 (COSCUP 2013)

  • 1. 1 AngularJS 開發實戰 多奇數位創意有限公司 技術總監 黃保翕 ( Will 保哥 ) 部落格:http://blog.miniasp.com/ 重要的開發觀念與經驗分享
  • 2. All services from your imperative. 2 ANGULAR 執行生命週期 Angular Application Lifecycle
  • 3. All services from your imperative. 3 啟動 AngularJS 的過程 (開機: bootstrap)
  • 4. All services from your imperative. 4 執行 AngularJS 的流程 (執行時期)
  • 5. All services from your imperative. 5 模組 (Modules) 與 注入器 (Injector)
  • 6. All services from your imperative. 6 模組 (Modules) 與 注入器 (Injector)  注入器 (Injector)  是一個 service locator (服務物件尋找器)  一個 ng-app 只會有一個 injector  injector 負責維護一群內部服務物件快取  每一個註冊在 injector 的物件都會有個名稱  如果透過名稱找不到物件,會透過 instance factory 自動建立  模組 (Modules)  一個設定注入器 instance factory 的管道  http://docs.angularjs.org/api/AUTO.$provide
  • 7. All services from your imperative. 7 使用 angular.module 配置執行環境  透過 angular.module 宣告模組 (Module)  配置 Angular 應用程式的唯一方法 (易於了 解)  run(initializationFn)  config(configFn)  controller(name, constructor)  directive(name, directiveFactory)  filter(name, filterFactory)  animation(name, animationFactory)  constant(name, object)
  • 8. All services from your imperative. 8 相依性注入 Dependency Injection
  • 9. All services from your imperative. 9 了解與使用相依性注入  建立物件相依性的三種方式  透過 new 運算子  透過全域變數 (根物件下的變數/屬性)  要使用的時候自動注入 (相依性注入)  何謂相依性注入 (Dependency Injection)  一種抽象的執行過程,隱藏複雜的物件關係  一種詭異的執行模式,自動注入其他元件  e.g. config, controller, factory, directive, filter, run
  • 10. All services from your imperative. 10 DI 範例:宣告 Angular 控制器建構式  宣告控制器建構式 function MainCtrl($scope) { $scope.name = 'Will'; }  使用 MainCtrl 的方法 <div ng-controller="MainCtrl"> {{ name }} </div>
  • 11. All services from your imperative. 11 關於 Angular Services 物件  採用獨體模式 (Singleton Pattern)  取得服務物件後,會自動被快取!  代表服務物件的程式碼都不會重複執行!  採用相依性注入模式 (Dependency Injection)  註冊為 Angular Services 的物件,都可以自動 注入到其他元件上  管理元件與元件之間的相依性  採用延遲載入模式 (Lazy Loading)  只有在第一次使用時,才會建立服務實體
  • 12. All services from your imperative. 12 建立 Angular Services 物件 (Providers)  provider(name, providerType) 建立一個 provider 物件  傳入一個含有 this.$get 方法的建構式  factory(name, providerFunction) 建立一個 provider 物件  傳入一個函式,然後會自動包進一個 $get 並建立 provider  會透過 providerFunction.apply() 建立物件 ($injector.instantiate)  service(name, constructor) 建立一個 provider 物件  傳入一個建構式,建立物件實體後,透過 factory 包成一個 provider  value(name, object) 建立一個 provider 物件  傳入一個值,透過 factory 包成一個 provider  constant(name, value)  直接儲存於 providerCache 與 instanceCache 內部物件之中  decorator(serviceName, decoratorFn)  用來作為特定 service 的修飾函式,傳入 $delegate 為原先的服務實體 ※ 比較 service & factory & provider 的差異 http://jsbin.com/oceyon/1/edit
  • 13. All services from your imperative. 13 DI 範例 (1):宣告 Angular 控制器建構式  宣告控制器建構式 function MainCtrl($scope) { $scope.name = 'Will'; }  使用 $inject 註釋語法 (optional) MainCtrl.$inject = ['$scope', '$http'];  目的:避免 JS 最小化帶來的影響!
  • 14. All services from your imperative. 14 DI 範例 (2):透過 module 宣告物件  宣告自訂模組 var app = angular.module('myApp', []);  宣告控制器建構式 function MainCtrl($scope) { $scope.name = 'Will'; }  使用 $inject 註釋語法  MainCtrl.$inject = ['$scope', '$http'];  將控制器註冊進模組  app.controller('MainCtrl', MainCtrl);
  • 15. All services from your imperative. 15 DI 範例 (3):使用內置註釋語法  宣告自訂模組 var app = angular.module('myApp', []);  宣告控制器建構式 function MainCtrl(renamed$scope, renamed$http) { renamed$scope.name = 'Will'; }  將控制器註冊進模組 使用內置註釋語法 (Inline Annotation)  app.controller('MainCtrl', ['$scope', '$http', MainCtrl]);
  • 16. All services from your imperative. 16 可以使用 DI 的地方 angular.module('myModule', []). controller('MyController', ['$scope', 'dep1', 'dep2', function($scope, dep1, dep2) { }). config(['depProvider', function(depProvider){ ... }]). factory('serviceId', ['depService', function(depService) { ... }]). directive('directiveName', ['depService', function(depService) { ... }]). filter('filterName', ['depService', function(depService) { ... }]). run(['depService', function(depService) { ... }]);
  • 17. All services from your imperative. 17 ANGULAR 程式碼組織原則 How to code in the right way to the right place
  • 18. All services from your imperative. 18 如何有效組織 Angular 程式碼與樣板  Views / Templates  所有的 Scope 物件都應該「唯讀」  Angular Controllers  所有的 Scope 物件都應該「唯寫」(讀也可以)  不應該處理任何跟 DOM 有關的工作 (盡量啦)  只負責跟 View 溝通  Angular Services (e.g. factory, service, provider, …)  不應該處理任何跟 DOM 有關的工作 (盡量啦)  共於元件之間的資料時(包括控制器)  只撰寫可以獨立運作的程式碼 (與View無關)
  • 19. All services from your imperative. 19 如何有效組織 Angular 程式碼與樣板  Angular Directives  所有與 DOM 相關的工作,都應該寫在這裡  Angular Filters  只應該處理要被過濾的資料  不應該處理任何跟 DOM 有關的工作  Angular Config  定義路由規則  定義較為底層的 Angular 設定 (providers, …)  不應該處理任何跟 DOM 有關的工作
  • 20. All services from your imperative. 20 總結  Angular 執行生命週期  了解生命週期,降低除錯時間  相依性注入  了解注入邏輯,加快開發速度  Angular 程式碼組織原則  將程式碼寫對地方,可以讓你上天堂
  • 21. All services from your imperative. 21 聯絡資訊  The Will Will Web 記載著 Will 在網路世界的學習心得與技術分享  http://blog.miniasp.com/  Will 保哥的技術交流中心 (臉書粉絲專頁)  http://www.facebook.com/will.fans  ★ ★ ★ Will 保哥的噗浪 ★ ★ ★  http://www.plurk.com/willh/invite
  • 22. All services from your imperative. 22 Will 保哥的 YouTube 影音教學中心  募集 1,000 位訂閱用戶 (使用直播功能)