SlideShare a Scribd company logo
1 of 39
1
AngularJS 開發實戰
多奇數位創意有限公司
技術總監 黃保翕 ( Will 保哥 )
部落格:http://blog.miniasp.com/
解析 angular-seed 專案架構與內容
All services from your imperative.
2
ANGULARJS 入門
Basic AngularJS
All services from your imperative.
3
載入 AngularJS 函式庫
 下載網址
 http://angularjs.org/
 所有版本下載 (含各版本文件)
 http://code.angularjs.org/
 載入函式庫
 <script src="/js/angular.min.js"></script>
 <script
src="https://ajax.googleapis.com/ajax/libs/angula
rjs/1.1.5/angular.min.js"></script>
All services from your imperative.
4
宣告應用程式作用域 (Application Scope)
 宣告方式
 <html ng-app>
 <html ng-app="optionalModuleName">
 特性
 一份 HTML 只能宣告一個應用程式作用域
 應用程式作用域會初始化所有 AngularJS 物件
 $rootScope
 $injector (Instance Cache) ( DI by Name )
 $provider (Instance Factory) ( Singleton Pattern)
 $routeProvider (Routing Module) (SPA)
 ….
All services from your imperative.
5
Angular 表達式 (Angular Expressions)
 用途
 類 JavaScript 語法,表達模型的程式片段
 語法範例
 {{ 9*9 }}
 {{ 'Hello World' }}
 {{ "Hello World" }}
 {{ (true) ? '真' : '假' }} 不要放邏輯!
 {{ { 'key': 'value' }.key }}
 {{ obj = 123 }}
 {{ obj }}
All services from your imperative.
6
Angular 過濾器 (Angular Filters)
 用途
 用來轉換或過濾各種資料
 語法範例
 {{ 9999 | number }}
 {{ 9999+1 | number:2 }}
 {{ 999*2 | currency }}
 {{ 'Hello World' | uppercase }}
 {{ 'Hello World' | lowercase }}
 {{ obj | json }}
All services from your imperative.
7
Angular 過濾器 (Angular Filters)
 格式轉換
 currency
 number
 date
 lowercase
 uppercase
 json
 資料過濾範例
 http://jsbin.com/angularjs-filters/1
 資料過濾
 filter
 limitTo
 orderBy
All services from your imperative.
8
Angular 指令 (Directives)
All services from your imperative.
9
宣告控制器作用域 (Controller Scope)
 宣告方式
 <ANY ng-controller="MainCtrl"></ANY>
 特性
 動態建立一個作用域 (Scope)
 可以建立多層次的作用域
 巢狀作用域之間會有繼承關係
 原型鏈結 (Prototype Chain)
All services from your imperative.
10
定義控制器
 範例程式
function MainCtrl($scope)
{
$scope.name = { 'name': 'Will' };
}
All services from your imperative.
11
如何載入額外的 Angular 模組
 預設載入 ng 模組
 var app = angular.module('app', []);
 <html ng-app="app">
 載入其他 Angular 模組
 var app = angular.module('app', ['ngSanitize']);
 <html ng-app="app">
 <script src="angular-sanitize.js"></script>
 範例
 http://jsbin.com/angularjs-load-modules/1/edit
All services from your imperative.
12
ANGULARJS 整體架構概觀
The Conceptual Overview of AngularJS
All services from your imperative.
13
AngularJS 有哪些特性
 MVC / MVVM / MVW
 Data binding
 Dependency Injection
 Testing
 Routing
 Templates
 jqLite
 Form Validation
 Controllers
 Views
 Scope ( View <-> $scope <-> Controller )
 ……
All services from your imperative.
14
啟動 AngularJS 的過程 (開機: bootstrap)
All services from your imperative.
15
執行 AngularJS 的流程 (執行時期)
All services from your imperative.
16
關於 Scope (作用域)
 用來偵測 Model 物件的變更
 ng 靠 Scope 連結 View 與 Controller 之間
 View: 表達式 (expression)
 Controller: $scope
 Scope 擁有物件繼承特性
 類似 DOM 的樹狀結構
 透過 ng 的 directives 建立新的 Scope
 ng-controller, ng-repeat, ng-switch
 ng-view, ng-include
 其他自訂的 directives
All services from your imperative.
17
MVC 設計樣式
 Controller
 用來定義應用程式的主要行為! (商業邏輯)
 屬性 (原始型別、物件型別) / 事件 / 方法
 Model
 用來存取資料,連結 View / Controller 的橋樑
 $scope / $rootScope / Custom Model
 View
 以 DOM 為範本 ( 相較於用 string 為範本 )
 透過 ng-model 啟動雙向資料繫結
 原則: 不要把邏輯放在 View 裡面!
All services from your imperative.
18
控制器 (Controller)
All services from your imperative.
19
模型 (Model)
All services from your imperative.
20
檢視頁面 (View)
All services from your imperative.
21
賦予 HTML 超能力的指令 (Directives)
 賦予 HTML 額外的
 行為 (behavior)
 事件 (events)
 擴充 HTML 的方式
 元素名稱 (覆寫內建元素或自訂新元素)
 屬性名稱 (覆寫內建屬性或自訂新屬性)
 樣式類別名稱 (透過 HTML 的 class 屬性)
 註解型態 (透過註解的形式擴充 HTML 能力)
All services from your imperative.
22
資料過濾器 (Filters)
 將 Model 資料進行過濾或格式轉換
 語法範例
 {{ 9999 | number }}
 {{ 9999+1 | number:2 }}
 {{ 999*2 | currency }}
 {{ 'Hello World' | uppercase }}
 {{ 'Hello World' | lowercase }}
 {{ obj | json }}
All services from your imperative.
23
模組 (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.
24
模組 (Modules) 與 注入器 (Injector)
All services from your imperative.
25
ANGULAR-SEED 專案內容剖析
The Content of the angular-seed projects
All services from your imperative.
26
angular-seed 專案導覽
 導覽工具
 Sublime Text 2
 JetBrains WebStorm 6
 NodeJS > scripts/web-server.js
 合併原始碼
 http://jsbin.com/ukoyip/1/edit
All services from your imperative.
27
載入 AngularJS 函式庫
 下載網址 (含各版本文件)
 http://angularjs.org/
 http://code.angularjs.org/
 同步載入
 <script src="/js/angular.min.js"></script>
 <script
src="https://ajax.googleapis.com/ajax/libs/angula
rjs/1.1.5/angular.min.js"></script>
 非同步載入
 先載入 angular-loader.min.js 確保正確執行
 再使用 $script 或 RequireJS 載入函式庫
All services from your imperative.
28
使用 angular loader 載入與執行
// 使用 $script 非同步載入所有相依的函式庫腳本
$script([
'lib/angular/angular.js',
'js/app.js',
'js/services.js',
'js/controllers.js',
'js/filters.js',
'js/directives.js'
], function() {
// 載入完成後執行 ng 初始化動作
angular.bootstrap(document, ['myApp']);
});
All services from your imperative.
29
透過 angular.module 建立與匯入模組
 angular.module (API in module ng )
 建立與匯入相依 模組 (module) 的唯一方法
 模組的主要用途是配置 NG 的執行內容
 controller
 directive
 filter
 Angular Services ( Developer Guide / Creating Services )
 service
 factory
 provider
 value
 constant
 config
 route
 animation
All services from your imperative.
30
透過 angular.module 配置 NG 執行環境
 Module (Type in module ng )
 run(initializationFn)
 config(configFn)
 controller(name, constructor)
 directive(name, directiveFactory)
 filter(name, filterFactory)
 animation(name, animationFactory)
All services from your imperative.
31
透過 angular.module 配置 NG 執行環境
 Module (Type in module ng )
 Angular Services
 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, object) 建立 providerCache/instanceCache
 function constant(name, value) {
 providerCache[name] = value;
 instanceCache[name] = value;
 }
 http://www.egghead.io/video/HvTZbQ_hUZY
※ 比較 service & factory & provider 的差異
http://jsbin.com/ohamub/678/edit
All services from your imperative.
32
不同專案規模的目錄配置
 小型 NG 專案
 依據 ng 物件類型區分不同模組檔案
 稍微抽象一點的 NG 專案
 依據 ng 物件類型區分目錄
 再依網站功能模組來區分不同模組檔案
 依據功能模組切割
 依據網站功能模組區分目錄
 再依據 ng 物件類型區分目錄
 再依網站功能或服務區分不同模組檔案
All services from your imperative.
33
小型 NG 專案
All services from your imperative.
34
稍微抽象一點的 NG 專案
All services from your imperative.
35
依據功能模組切割
All services from your imperative.
36
共用程式碼的管理
 AngularJS 有四種管理方法
 從 modules 呼叫共用的物件,可以借用 Facades 設計
樣式,以簡化複雜度。
 把同性質的程式碼,集中到 modules 進行管理,然
後視情況載入。
 新增工具方法到 $rootScope 即可共用於整個
ngApp 之間,包含所有 Child Scope 都能用。
(但少用為妙)
 使用事件(Events)解除元件之間的耦合關係,不用把
程式碼寫死。AngularJS 可以用 $on 方法註冊事件在
Scope 物件上,然後在 Controller 可以觸發上層
($emit)或下層($broadcast)的事件。
All services from your imperative.
37
Will 保哥的技術交流中心 (Facebook)
All services from your imperative.
38
聯絡資訊
 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.
39
感謝各位

More Related Content

Viewers also liked

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

Viewers also liked (18)

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

More from Will Huang

深入理解 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)Will Huang
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境Will Huang
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索Will Huang
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!Will Huang
 
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧Will Huang
 
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)Will Huang
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)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)
Micro-frontends with Angular 10 (Modern Web 2020)Will Huang
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點Will Huang
 
RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門Will Huang
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)Will Huang
 
你不可不知的 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)Will Huang
 
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)Will Huang
 
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)Will Huang
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Will Huang
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)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)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)Will Huang
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)Will Huang
 
使用 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)Will Huang
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)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)
 
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)
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點
 
RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
 
你不可不知的 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 开发者大会)
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)
 
利用.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 高峰會)
 

AngularJS 開發實戰:解析 angular-seed 專案架構與內容

  • 1. 1 AngularJS 開發實戰 多奇數位創意有限公司 技術總監 黃保翕 ( Will 保哥 ) 部落格:http://blog.miniasp.com/ 解析 angular-seed 專案架構與內容
  • 2. All services from your imperative. 2 ANGULARJS 入門 Basic AngularJS
  • 3. All services from your imperative. 3 載入 AngularJS 函式庫  下載網址  http://angularjs.org/  所有版本下載 (含各版本文件)  http://code.angularjs.org/  載入函式庫  <script src="/js/angular.min.js"></script>  <script src="https://ajax.googleapis.com/ajax/libs/angula rjs/1.1.5/angular.min.js"></script>
  • 4. All services from your imperative. 4 宣告應用程式作用域 (Application Scope)  宣告方式  <html ng-app>  <html ng-app="optionalModuleName">  特性  一份 HTML 只能宣告一個應用程式作用域  應用程式作用域會初始化所有 AngularJS 物件  $rootScope  $injector (Instance Cache) ( DI by Name )  $provider (Instance Factory) ( Singleton Pattern)  $routeProvider (Routing Module) (SPA)  ….
  • 5. All services from your imperative. 5 Angular 表達式 (Angular Expressions)  用途  類 JavaScript 語法,表達模型的程式片段  語法範例  {{ 9*9 }}  {{ 'Hello World' }}  {{ "Hello World" }}  {{ (true) ? '真' : '假' }} 不要放邏輯!  {{ { 'key': 'value' }.key }}  {{ obj = 123 }}  {{ obj }}
  • 6. All services from your imperative. 6 Angular 過濾器 (Angular Filters)  用途  用來轉換或過濾各種資料  語法範例  {{ 9999 | number }}  {{ 9999+1 | number:2 }}  {{ 999*2 | currency }}  {{ 'Hello World' | uppercase }}  {{ 'Hello World' | lowercase }}  {{ obj | json }}
  • 7. All services from your imperative. 7 Angular 過濾器 (Angular Filters)  格式轉換  currency  number  date  lowercase  uppercase  json  資料過濾範例  http://jsbin.com/angularjs-filters/1  資料過濾  filter  limitTo  orderBy
  • 8. All services from your imperative. 8 Angular 指令 (Directives)
  • 9. All services from your imperative. 9 宣告控制器作用域 (Controller Scope)  宣告方式  <ANY ng-controller="MainCtrl"></ANY>  特性  動態建立一個作用域 (Scope)  可以建立多層次的作用域  巢狀作用域之間會有繼承關係  原型鏈結 (Prototype Chain)
  • 10. All services from your imperative. 10 定義控制器  範例程式 function MainCtrl($scope) { $scope.name = { 'name': 'Will' }; }
  • 11. All services from your imperative. 11 如何載入額外的 Angular 模組  預設載入 ng 模組  var app = angular.module('app', []);  <html ng-app="app">  載入其他 Angular 模組  var app = angular.module('app', ['ngSanitize']);  <html ng-app="app">  <script src="angular-sanitize.js"></script>  範例  http://jsbin.com/angularjs-load-modules/1/edit
  • 12. All services from your imperative. 12 ANGULARJS 整體架構概觀 The Conceptual Overview of AngularJS
  • 13. All services from your imperative. 13 AngularJS 有哪些特性  MVC / MVVM / MVW  Data binding  Dependency Injection  Testing  Routing  Templates  jqLite  Form Validation  Controllers  Views  Scope ( View <-> $scope <-> Controller )  ……
  • 14. All services from your imperative. 14 啟動 AngularJS 的過程 (開機: bootstrap)
  • 15. All services from your imperative. 15 執行 AngularJS 的流程 (執行時期)
  • 16. All services from your imperative. 16 關於 Scope (作用域)  用來偵測 Model 物件的變更  ng 靠 Scope 連結 View 與 Controller 之間  View: 表達式 (expression)  Controller: $scope  Scope 擁有物件繼承特性  類似 DOM 的樹狀結構  透過 ng 的 directives 建立新的 Scope  ng-controller, ng-repeat, ng-switch  ng-view, ng-include  其他自訂的 directives
  • 17. All services from your imperative. 17 MVC 設計樣式  Controller  用來定義應用程式的主要行為! (商業邏輯)  屬性 (原始型別、物件型別) / 事件 / 方法  Model  用來存取資料,連結 View / Controller 的橋樑  $scope / $rootScope / Custom Model  View  以 DOM 為範本 ( 相較於用 string 為範本 )  透過 ng-model 啟動雙向資料繫結  原則: 不要把邏輯放在 View 裡面!
  • 18. All services from your imperative. 18 控制器 (Controller)
  • 19. All services from your imperative. 19 模型 (Model)
  • 20. All services from your imperative. 20 檢視頁面 (View)
  • 21. All services from your imperative. 21 賦予 HTML 超能力的指令 (Directives)  賦予 HTML 額外的  行為 (behavior)  事件 (events)  擴充 HTML 的方式  元素名稱 (覆寫內建元素或自訂新元素)  屬性名稱 (覆寫內建屬性或自訂新屬性)  樣式類別名稱 (透過 HTML 的 class 屬性)  註解型態 (透過註解的形式擴充 HTML 能力)
  • 22. All services from your imperative. 22 資料過濾器 (Filters)  將 Model 資料進行過濾或格式轉換  語法範例  {{ 9999 | number }}  {{ 9999+1 | number:2 }}  {{ 999*2 | currency }}  {{ 'Hello World' | uppercase }}  {{ 'Hello World' | lowercase }}  {{ obj | json }}
  • 23. All services from your imperative. 23 模組 (Modules) 與 注入器 (Injector)  注入器 (Injector)  是一個 service locator  一個 ng-app 只會有一個 injector  injector 負責維護一群內部物件快取  每一個註冊在 injector 的物件都會有個名稱  如果透過名稱找不到物件,會透過 instance factory 自動建立  模組 (Modules)  一個設定注入器 instance factory 的管道  http://docs.angularjs.org/api/AUTO.$provide
  • 24. All services from your imperative. 24 模組 (Modules) 與 注入器 (Injector)
  • 25. All services from your imperative. 25 ANGULAR-SEED 專案內容剖析 The Content of the angular-seed projects
  • 26. All services from your imperative. 26 angular-seed 專案導覽  導覽工具  Sublime Text 2  JetBrains WebStorm 6  NodeJS > scripts/web-server.js  合併原始碼  http://jsbin.com/ukoyip/1/edit
  • 27. All services from your imperative. 27 載入 AngularJS 函式庫  下載網址 (含各版本文件)  http://angularjs.org/  http://code.angularjs.org/  同步載入  <script src="/js/angular.min.js"></script>  <script src="https://ajax.googleapis.com/ajax/libs/angula rjs/1.1.5/angular.min.js"></script>  非同步載入  先載入 angular-loader.min.js 確保正確執行  再使用 $script 或 RequireJS 載入函式庫
  • 28. All services from your imperative. 28 使用 angular loader 載入與執行 // 使用 $script 非同步載入所有相依的函式庫腳本 $script([ 'lib/angular/angular.js', 'js/app.js', 'js/services.js', 'js/controllers.js', 'js/filters.js', 'js/directives.js' ], function() { // 載入完成後執行 ng 初始化動作 angular.bootstrap(document, ['myApp']); });
  • 29. All services from your imperative. 29 透過 angular.module 建立與匯入模組  angular.module (API in module ng )  建立與匯入相依 模組 (module) 的唯一方法  模組的主要用途是配置 NG 的執行內容  controller  directive  filter  Angular Services ( Developer Guide / Creating Services )  service  factory  provider  value  constant  config  route  animation
  • 30. All services from your imperative. 30 透過 angular.module 配置 NG 執行環境  Module (Type in module ng )  run(initializationFn)  config(configFn)  controller(name, constructor)  directive(name, directiveFactory)  filter(name, filterFactory)  animation(name, animationFactory)
  • 31. All services from your imperative. 31 透過 angular.module 配置 NG 執行環境  Module (Type in module ng )  Angular Services  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, object) 建立 providerCache/instanceCache  function constant(name, value) {  providerCache[name] = value;  instanceCache[name] = value;  }  http://www.egghead.io/video/HvTZbQ_hUZY ※ 比較 service & factory & provider 的差異 http://jsbin.com/ohamub/678/edit
  • 32. All services from your imperative. 32 不同專案規模的目錄配置  小型 NG 專案  依據 ng 物件類型區分不同模組檔案  稍微抽象一點的 NG 專案  依據 ng 物件類型區分目錄  再依網站功能模組來區分不同模組檔案  依據功能模組切割  依據網站功能模組區分目錄  再依據 ng 物件類型區分目錄  再依網站功能或服務區分不同模組檔案
  • 33. All services from your imperative. 33 小型 NG 專案
  • 34. All services from your imperative. 34 稍微抽象一點的 NG 專案
  • 35. All services from your imperative. 35 依據功能模組切割
  • 36. All services from your imperative. 36 共用程式碼的管理  AngularJS 有四種管理方法  從 modules 呼叫共用的物件,可以借用 Facades 設計 樣式,以簡化複雜度。  把同性質的程式碼,集中到 modules 進行管理,然 後視情況載入。  新增工具方法到 $rootScope 即可共用於整個 ngApp 之間,包含所有 Child Scope 都能用。 (但少用為妙)  使用事件(Events)解除元件之間的耦合關係,不用把 程式碼寫死。AngularJS 可以用 $on 方法註冊事件在 Scope 物件上,然後在 Controller 可以觸發上層 ($emit)或下層($broadcast)的事件。
  • 37. All services from your imperative. 37 Will 保哥的技術交流中心 (Facebook)
  • 38. All services from your imperative. 38 聯絡資訊  The Will Will Web 記載著 Will 在網路世界的學習心得與技術分享  http://blog.miniasp.com/  Will 保哥的技術交流中心 (臉書粉絲專頁)  http://www.facebook.com/will.fans  ★ ★ ★ Will 保哥的噗浪 ★ ★ ★  http://www.plurk.com/willh/invite
  • 39. All services from your imperative. 39 感謝各位