[食譜好菜] AngularJS 基本術語及生命週期

這篇講的是 AngularJS 1.x,寫文章的當下 AngularJS 2.0 已經 RC5 了,已知 AngularJS 2.0 是不會向下相容 1.x 的。

那我為什麼還要寫 AngularJS 1.x 的文章呢? - 用來幫助我回憶的!

以前花時間閱讀跟學習的技術,隨著時間以及很少用到,記憶會慚慚淡化,趁現在還記得幾分趕快做個筆記,尤其是技術背後本身的概念及限制,這些都會影響到我們掌握一門技術的程度。

另外,對 AngularJS 2.0 有興趣的朋友可以參考保哥的文章。

名詞解釋

Module

首先 AngularJS 大部分人遇到第一個名詞是 Module,Module 是 AngularJS 用來包裝相關程式碼的一個作法,我們可以這樣想像 Module,它就有點像 .NET 的 Assembly、Java 的 packages。

Controller

Controller 是 AngularJS 的主力,大部分觸發 UI 工作的程式碼會被定義在 Controller 裡面,會在 Controller 裡面處理的常見工作包括:到後端取得資料、呈現資料、決定元素的顯示方式、與使用者互動…等等,而且 Controller 必定會連結到至少一個頁面。

Directive

在 AngularJS 的世界 Directive 主要分成兩種類型:行為的修飾詞(Modifier)、可重用的元件(Component)。

  • 行為的修飾詞:這類的 Directive 直接掛在現有的 HTML 標籤上,藉此增加或修改 UI 現有的行為,像是 ng-bind、ng-mode、ng-show…等等,都是屬於這類的 Directive。
  • 可重用的元件:這類型的 Directive 允許我們將一段 HTML 結構附予適當的名稱之後,做成一個類似像 HTML 元件的標籤項目,除此之外還可以為客製化的標籤項目定義專屬的 Controller,用來處理互動行為的邏輯,套一句黑大說的話「活生生就像 ASP.NET WebControl 在 HTML 端復活了!」

Service

Service 指的是在 AngularJS 應用程式內可共享及重用的 API 元件,而建立這種元件有三種方式:

  • service:使用 service() 就相當於使用 new 關鍵字來建立物件,只要下 this 就可以取得 Service 實例的屬性及方法,它會為每個相依的 Controller 建立一個 Service 實例。
  • factory:顧名思義它就是個工廠,使用 factory() 與 service() 方法不同的是我們要在 factory() 裡面自己建立 Service 實例,最後回傳 Service 實例,factory() 它就是一個 function,但是 service() 卻是一個 constructor。
  • provider:最後是 provider(),service() 及 factory() 都歸它管,都是它封裝出來的,provider() 必須實作 $get 方法來回傳 Service 實例,Controller 也是透過 $get 方法取得 Service 實例。

Filter

Filter 是將資料格式化後呈現給使用者,像是幣別、數值、日期…等等,除此之外 Filter 還可以對資料排序、使用正則表達式過濾字串…等,最強大的是我們可以直接給一個回傳布林值的 function,裡面撰寫任何我們想要過濾的邏輯。

生命週期

AngularJS 的生命週期依序大概是這樣的:

1. HTML 頁面載入:

  • 選擇性地先載入 jQuery 的 Scripts。
  • 載入 AngularJS 的 Scripts。
  • 載入應用程式的 Scripts。

2. HTML 頁面載入完成。

3. HTML document ready 之後,AngularJS 搜尋 ng-app 內的所有實體。

4. 透過 compile 步驟執行 HTML 內容。

  • 尋找 HTML 每一行內的 directives。
  • 執行 directive 定義物件的必要程式碼或是建立、載入 HTML 內容。
  • 針對每個 directive 生成 link 函式。

5. 取用 link 函式把它與 scope 組合。

  • 在 UI 上呈現引用到的 scope 變數。
  • 針對所有的 directive 綁定加入 wathcher 及 listener。

6. 呈現即時互動的 view。

文字說明比較不好看,我們來看流程圖好了。

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學