
- AngularJS 教程
- AngularJS - 首頁
- AngularJS - 概述
- AngularJS - 環境搭建
- AngularJS - MVC 架構
- AngularJS - 第一個應用
- AngularJS - 指令
- AngularJS - 表示式
- AngularJS - 控制器
- AngularJS - 過濾器
- AngularJS - 表格
- AngularJS - HTML DOM
- AngularJS - 模組
- AngularJS - 表單
- AngularJS - 包含
- AngularJS - AJAX
- AngularJS - 檢視
- AngularJS - 作用域
- AngularJS - 服務
- AngularJS - 依賴注入
- AngularJS - 自定義指令
- AngularJS - 國際化
- AngularJS 應用
- AngularJS - 待辦事項應用
- AngularJS - 記事本應用
- AngularJS - Bootstrap 應用
- AngularJS - 登入應用
- AngularJS - 上傳檔案
- AngularJS - 內聯應用
- AngularJS - 導航選單
- AngularJS - 切換選單
- AngularJS - 訂單表單
- AngularJS - 搜尋選項卡
- AngularJS - 拖拽應用
- AngularJS - 購物車應用
- AngularJS - 翻譯應用
- AngularJS - 圖表應用
- AngularJS - 地圖應用
- AngularJS - 分享應用
- AngularJS - 天氣應用
- AngularJS - 定時器應用
- AngularJS - Leaflet 應用
- AngularJS - Lastfm 應用
- AngularJS 有用資源
- AngularJS - 常見問題
- AngularJS 快速指南
- AngularJS - 有用資源
- AngularJS - 討論
AngularJS 快速指南
AngularJS - 概述
什麼是 AngularJS?
AngularJS 是一個開源的 Web 應用框架。它最初由 Misko Hevery 和 Adam Abrons 於 2009 年開發,現在由 Google 維護。其最新版本為 1.4.3。
其官方文件對 AngularJS 的定義如下:
AngularJS 是一個用於動態 Web 應用的結構化框架。它允許您使用 HTML 作為模板語言,並擴充套件 HTML 語法以清晰簡潔地表達應用程式的元件。Angular 的資料繫結和依賴注入消除了您目前必須編寫的許多程式碼。並且這一切都發生在瀏覽器中,使其成為任何伺服器技術的理想合作伙伴。
特性
AngularJS 是一個強大的基於 JavaScript 的開發框架,用於建立富網際網路應用程式 (RIA)。
AngularJS 為開發人員提供了使用 JavaScript 以清晰的 MVC(模型-檢視-控制器)方式編寫客戶端應用程式的選項。
使用 AngularJS 編寫的應用程式與跨瀏覽器相容。AngularJS 自動處理適合每個瀏覽器的 JavaScript 程式碼。
AngularJS 是開源的,完全免費的,並被全球數千名開發人員使用。它根據 Apache 許可證 2.0 版授權。
總的來說,AngularJS 是一個構建大型且高效能 Web 應用程式的框架,同時保持其易於維護。
核心特性
以下是 AngularJS 最重要的核心特性:
資料繫結 - 它是在模型和檢視元件之間自動同步資料。
作用域 - 這些物件引用模型。它們充當控制器和檢視之間的粘合劑。
控制器 - 這些是繫結到特定作用域的 JavaScript 函式。
服務 - AngularJS 帶有幾個內建服務,例如 $https:用於進行 XMLHttpRequests。這些是單例物件,在應用程式中僅例項化一次。
過濾器 - 這些從陣列中選擇專案的子集並返回一個新陣列。
指令 - 指令是 DOM 元素(例如元素、屬性、css 等)上的標記。這些可用於建立自定義 HTML 標籤,用作新的自定義小部件。AngularJS 有內建指令(ngBind,ngModel…)
模板 - 這些是使用控制器和模型中的資訊呈現的檢視。這些可以是單個檔案(如 index.html)或使用“部分”在一個頁面中的多個檢視。
路由 - 這是切換檢視的概念。
模型檢視無論什麼 - MVC 是一種將應用程式劃分為不同部分(稱為模型、檢視和控制器)的設計模式,每個部分都有不同的職責。AngularJS 並沒有以傳統意義上實現 MVC,而是更接近於 MVVM(模型-檢視-檢視模型)。Angular JS 團隊幽默地稱之為模型檢視無論什麼。
深度連結 - 深度連結允許您在 URL 中編碼應用程式的狀態,以便可以將其新增為書籤。然後,應用程式可以從 URL 恢復到相同的狀態。
依賴注入 - AngularJS 具有內建的依賴注入子系統,透過使應用程式更易於開發、理解和測試來幫助開發人員。
概念
下圖描述了 AngularJS 的一些重要部分,我們將在後續章節中詳細討論。

AngularJS 的優勢
AngularJS 提供了以非常乾淨和可維護的方式建立單頁應用程式的功能。
AngularJS 為 HTML 提供資料繫結功能,從而為使用者提供豐富且響應迅速的體驗。
AngularJS 程式碼是單元可測試的。
AngularJS 使用依賴注入並利用關注點分離。
AngularJS 提供可重用的元件。
使用 AngularJS,開發人員可以編寫更少的程式碼並獲得更多功能。
在 AngularJS 中,檢視是純 HTML 頁面,而用 JavaScript 編寫的控制器執行業務處理。
最重要的是,AngularJS 應用程式可以在所有主流瀏覽器和智慧手機上執行,包括基於 Android 和 iOS 的手機和平板電腦。
AngularJS 的劣勢
雖然 AngularJS 具有很多優點,但同時我們也應該考慮以下幾點:
不安全 - 作為僅 JavaScript 框架,使用 AngularJS 編寫的應用程式是不安全的。必須進行伺服器端身份驗證和授權才能確保應用程式安全。
不可降級 - 如果您的應用程式使用者停用了 JavaScript,則使用者只會看到基本頁面,而不會看到更多內容。
AngularJS 元件
AngularJS 框架可以分為以下三個主要部分:
ng-app - 此指令定義並將 AngularJS 應用程式連結到 HTML。
ng-model - 此指令將 AngularJS 應用程式資料的 value 繫結到 HTML 輸入控制元件。
ng-bind - 此指令將 AngularJS 應用程式資料繫結到 HTML 標籤。
AngularJS - 環境搭建
在本章中,我們將討論如何在 Web 應用程式開發中設定 AngularJS 庫。我們還將簡要研究目錄結構及其內容。
當您開啟連結https://angularjs.org/時,您會看到有兩個選項可以下載 AngularJS 庫:

在 GitHub 上檢視 - 點選此按鈕轉到 GitHub 並獲取所有最新指令碼。
下載 AngularJS 1 - 或者點選此按鈕,將看到如下螢幕:

此螢幕提供瞭如下幾種使用 Angular JS 的選項:
下載和本地託管檔案
有兩個不同的選項傳統和最新。名稱本身具有自描述性。傳統的版本小於 1.2.x,最新的版本為 1.5.x。
我們還可以使用最小化、未壓縮或壓縮版本。
CDN 訪問 - 您還可以訪問 CDN。CDN 將為您提供全球範圍內區域資料中心的訪問許可權,在本例中,Google 託管。這意味著使用 CDN 將託管檔案的責任從您自己的伺服器轉移到一系列外部伺服器。這也提供了一個優勢,即如果您的網頁訪問者已從同一 CDN 下載了 AngularJS 的副本,則無需重新下載。
嘗試新的 angularJS 2 - 點選此按鈕下載 Angular JS beta 2 版本。與 AngularJS 1 的傳統和最新版本相比,此版本速度更快、支援移動裝置且更靈活。
在本教程中,我們使用庫的 CDN 版本。
示例
現在讓我們使用 AngularJS 庫編寫一個簡單的示例。讓我們建立一個名為myfirstexample.html的 HTML 檔案,如下所示:
<!doctype html> <html> <head> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.5.2/angular.min.js"></script> </head> <body ng-app = "myapp"> <div ng-controller = "HelloController" > <h2>Welcome {{helloTo.title}} to the world of Tutorialspoint!</h2> </div> <script> angular.module("myapp", []) .controller("HelloController", function($scope) { $scope.helloTo = {}; $scope.helloTo.title = "AngularJS"; }); </script> </body> </html>
以下部分詳細描述了上述程式碼:
包含 AngularJS
我們在 HTML 頁面中包含了 AngularJS JavaScript 檔案,以便我們可以使用 AngularJS:
<head> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> </head>
如果要更新到 Angular JS 的最新版本,請使用以下指令碼源,否則請在他們的官方網站上檢查 AngularJS 的最新版本。
<head> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.5.2/angular.min.js"></script> </head>
指向 AngularJS 應用
接下來,我們告訴 HTML 的哪個部分包含 AngularJS 應用。這是透過向 AngularJS 應用的根 HTML 元素新增ng-app屬性來完成的。您可以將其新增到html元素或body元素中,如下所示:
<body ng-app = "myapp"> </body>
檢視
檢視是這部分:
<div ng-controller = "HelloController" > <h2>Welcome {{helloTo.title}} to the world of Tutorialspoint!</h2> </div>
ng-controller告訴 AngularJS 使用哪個控制器與此檢視一起使用。helloTo.title告訴 AngularJS 將名為 helloTo.title 的“模型”value 寫入此位置的 HTML。
控制器
控制器部分是:
<script> angular.module("myapp", []) .controller("HelloController", function($scope) { $scope.helloTo = {}; $scope.helloTo.title = "AngularJS"; }); </script>
此程式碼在名為myapp的 angular 模組中註冊了一個名為HelloController的控制器函式。我們將在各自的章節中進一步學習有關模組和控制器的資訊。控制器函式透過 angular.module(...).controller(...) 函式呼叫在 angular 中註冊。
傳遞給控制器函式的$scope引數是模型。控制器函式添加了一個helloTo JavaScript 物件,並在該物件中添加了一個title欄位。
執行
將上述程式碼儲存為myfirstexample.html並在任何瀏覽器中開啟它。您將看到如下輸出:
Welcome AngularJS to the world of Tutorialspoint!
當頁面在瀏覽器中載入時,會發生以下事情:
HTML 文件載入到瀏覽器中,並由瀏覽器評估。AngularJS JavaScript 檔案載入,建立 angular 全域性物件。接下來,執行註冊控制器函式的 JavaScript。
接下來,AngularJS 掃描 HTML 以查詢 AngularJS 應用和檢視。找到檢視後,它將該檢視連線到相應的控制器函式。
接下來,AngularJS 執行控制器函式。然後,它使用控制器填充的模型中的資料呈現檢視。頁面現在已準備就緒。
AngularJS - MVC 架構
Model View Controller 或簡稱 MVC,是一種用於開發 Web 應用程式的軟體設計模式。模型檢視控制器模式由以下三個部分組成:
模型 - 它是模式的最低級別,負責維護資料。
檢視 - 負責將所有或部分資料顯示給使用者。
控制器 - 它是控制模型和檢視之間互動的軟體程式碼。
MVC 很流行,因為它將應用程式邏輯與使用者介面層隔離開,並支援關注點分離。控制器接收應用程式的所有請求,然後與模型一起準備檢視所需的所有資料。然後,檢視使用控制器準備的資料生成最終的可呈現響應。MVC 抽象可以以圖形方式表示如下。

模型
模型負責管理應用程式資料。它響應來自檢視的請求以及來自控制器的更新自身指令。
檢視
以特定格式呈現資料,由控制器決定呈現資料。它們是基於指令碼的模板系統,例如 JSP、ASP、PHP,並且非常易於與 AJAX 技術整合。
控制器
控制器響應使用者輸入並在資料模型物件上執行互動。控制器接收輸入、驗證輸入,然後執行修改資料模型狀態的業務操作。
AngularJS 是一個基於 MVC 的框架。在接下來的章節中,我們將看到 AngularJS 如何使用 MVC 方法。
AngularJS - 第一個應用
在開始使用 AngularJS 建立實際的 HelloWorld 應用程式之前,讓我們先了解 AngularJS 應用程式的實際組成部分。一個 AngularJS 應用程式包含以下三個重要的部分:
ng-app - 此指令定義並將 AngularJS 應用程式連結到 HTML。
ng-model - 此指令將 AngularJS 應用程式資料的 value 繫結到 HTML 輸入控制元件。
ng-bind - 此指令將 AngularJS 應用程式資料繫結到 HTML 標籤。
建立 AngularJS 應用程式的步驟
步驟 1:載入框架
作為一個純 JavaScript 框架,它可以使用 <Script> 標籤新增。
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script>
步驟 2:使用 ng-app 指令定義 AngularJS 應用程式
<div ng-app = ""> ... </div>
步驟 3:使用 ng-model 指令定義模型名稱
<p>Enter your Name: <input type = "text" ng-model = "name"></p>
步驟 4:使用 ng-bind 指令繫結上面定義的模型的值。
<p>Hello <span ng-bind = "name"></span>!</p>
執行 AngularJS 應用程式的步驟
在 HTML 頁面中使用上述三個步驟。
testAngularJS.htm
<html> <head> <title>AngularJS First Application</title> </head> <body> <h1>Sample Application</h1> <div ng-app = ""> <p>Enter your Name: <input type = "text" ng-model = "name"></p> <p>Hello <span ng-bind = "name"></span>!</p> </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> </body> </html>
輸出
在 Web 瀏覽器中開啟 textAngularJS.htm。輸入您的姓名並檢視結果。
AngularJS 如何與 HTML 整合
ng-app 指令指示 AngularJS 應用程式的開始。
然後,ng-model 指令建立一個名為“name”的模型變數,該變數可用於 html 頁面以及具有 ng-app 指令的 div 中。
ng-bind 然後使用 name 模型在 html span 標籤中顯示,無論何時使用者在文字框中輸入內容。
關閉 </div> 標籤表示 AngularJS 應用程式的結束。
AngularJS - 指令
AngularJS 指令用於擴充套件 HTML。這些是特殊屬性,以 ng- 字首開頭。我們將討論以下指令:
ng-app - 此指令啟動 AngularJS 應用程式。
ng-init - 此指令初始化應用程式資料。
ng-model - 此指令將 AngularJS 應用程式資料的 value 繫結到 HTML 輸入控制元件。
ng-repeat - 此指令為集合中的每個專案重複 html 元素。
ng-app 指令
ng-app 指令啟動 AngularJS 應用程式。它定義根元素。當載入包含 AngularJS 應用程式的網頁時,它會自動初始化或引導應用程式。它還用於在 AngularJS 應用程式中載入各種 AngularJS 模組。在下面的示例中,我們使用 div 元素的 ng-app 屬性定義了一個預設的 AngularJS 應用程式。
<div ng-app = ""> ... </div>
ng-init 指令
ng-init 指令初始化 AngularJS 應用程式資料。它用於將值賦給要在應用程式中使用的變數。在下面的示例中,我們將初始化一個國家陣列。我們使用 JSON 語法來定義國家陣列。
<div ng-app = "" ng-init = "countries = [{locale:'en-US',name:'United States'}, {locale:'en-GB',name:'United Kingdom'}, {locale:'en-FR',name:'France'}]"> ... </div>
ng-model 指令
此指令將 AngularJS 應用程式資料的的值繫結到 HTML 輸入控制元件。在下面的示例中,我們定義了一個名為“name”的模型。
<div ng-app = ""> ... <p>Enter your Name: <input type = "text" ng-model = "name"></p> </div>
ng-repeat 指令
ng-repeat 指令為集合中的每個專案重複 html 元素。在下面的示例中,我們遍歷了國家陣列。
<div ng-app = ""> ... <p>List of Countries with locale:</p> <ol> <li ng-repeat = "country in countries"> {{ 'Country: ' + country.name + ', Locale: ' + country.locale }} </li> </ol> </div>
示例
以下示例將展示所有上述指令。
testAngularJS.htm
<html> <head> <title>AngularJS Directives</title> </head> <body> <h1>Sample Application</h1> <div ng-app = "" ng-init = "countries = [{locale:'en-US',name:'United States'}, {locale:'en-GB',name:'United Kingdom'}, {locale:'en-FR',name:'France'}]"> <p>Enter your Name: <input type = "text" ng-model = "name"></p> <p>Hello <span ng-bind = "name"></span>!</p> <p>List of Countries with locale:</p> <ol> <li ng-repeat = "country in countries"> {{ 'Country: ' + country.name + ', Locale: ' + country.locale }} </li> </ol> </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> </body> </html>
輸出
在 Web 瀏覽器中開啟 textAngularJS.htm。輸入您的姓名並檢視結果。
AngularJS - 表示式
表示式用於將應用程式資料繫結到 html。表示式寫在雙括號內,如 {{ expression }}。表示式的行為與 ng-bind 指令相同。AngularJS 應用程式表示式是純 javascript 表示式,並在使用它們的地方輸出資料。
使用數字
<p>Expense on Books : {{cost * quantity}} Rs</p>
使用字串
<p>Hello {{student.firstname + " " + student.lastname}}!</p>
使用物件
<p>Roll No: {{student.rollno}}</p>
使用陣列
<p>Marks(Math): {{marks[3]}}</p>
示例
以下示例將展示所有上述表示式。
testAngularJS.htm
<html> <head> <title>AngularJS Expressions</title> </head> <body> <h1>Sample Application</h1> <div ng-app = "" ng-init = "quantity = 1;cost = 30; student = {firstname:'Mahesh',lastname:'Parashar',rollno:101}; marks = [80,90,75,73,60]"> <p>Hello {{student.firstname + " " + student.lastname}}!</p> <p>Expense on Books : {{cost * quantity}} Rs</p> <p>Roll No: {{student.rollno}}</p> <p>Marks(Math): {{marks[3]}}</p> </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> </body> </html>
輸出
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 控制器
AngularJS 應用程式主要依靠控制器來控制應用程式中資料流。控制器使用 ng-controller 指令定義。控制器是一個包含屬性/特性和函式的 JavaScript 物件。每個控制器都接受 $scope 作為引數,它指的是控制器要控制的應用程式/模組。
<div ng-app = "" ng-controller = "studentController"> ... </div>
在這裡,我們使用 ng-controller 指令聲明瞭一個控制器 studentController。下一步,我們將定義 studentController 如下:
<script> function studentController($scope) { $scope.student = { firstName: "Mahesh", lastName: "Parashar", fullName: function() { var studentObject; studentObject = $scope.student; return studentObject.firstName + " " + studentObject.lastName; } }; } </script>
studentController 定義為一個以 $scope 作為引數的 JavaScript 物件。
$scope 指的是要使用 studentController 物件的應用程式。
$scope.student 是 studentController 物件的屬性。
firstName 和 lastName 是 $scope.student 物件的兩個屬性。我們已將預設值傳遞給他們。
fullName 是 $scope.student 物件的函式,其任務是返回組合名稱。
在 fullName 函式中,我們獲取 student 物件,然後返回組合名稱。
需要注意的是,我們也可以在單獨的 JS 檔案中定義控制器物件,並在 html 頁面中引用該檔案。
現在,我們可以使用 ng-model 或表示式使用 studentController 的 student 屬性,如下所示。
Enter first name: <input type = "text" ng-model = "student.firstName"><br> Enter last name: <input type = "text" ng-model = "student.lastName"><br> <br> You are entering: {{student.fullName()}}
我們將 student.firstName 和 student.lastname 繫結到兩個輸入框。
我們將 student.fullName() 繫結到 HTML。
現在,無論何時您在名字和姓氏輸入框中輸入任何內容,您都可以看到全名自動更新。
示例
以下示例將展示控制器的用法。
testAngularJS.htm
<html> <head> <title>Angular JS Controller</title> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "studentController"> Enter first name: <input type = "text" ng-model = "student.firstName"><br> <br> Enter last name: <input type = "text" ng-model = "student.lastName"><br> <br> You are entering: {{student.fullName()}} </div> <script> var mainApp = angular.module("mainApp", []); mainApp.controller('studentController', function($scope) { $scope.student = { firstName: "Mahesh", lastName: "Parashar", fullName: function() { var studentObject; studentObject = $scope.student; return studentObject.firstName + " " + studentObject.lastName; } }; }); </script> </body> </html>
輸出
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 過濾器
過濾器用於更改修改資料,並且可以使用管道字元組合在表示式或指令中。以下是常用過濾器的列表。
序號 | 名稱和說明 |
---|---|
1 | uppercase 將文字轉換為大寫文字。 |
2 | lowercase 將文字轉換為小寫文字。 |
3 | currency 將文字格式化為貨幣格式。 |
4 | filter 根據提供的條件過濾陣列到其子集。 |
5 | orderby 根據提供的條件對陣列進行排序。 |
uppercase 過濾器
使用管道字元將 uppercase 過濾器新增到表示式中。在這裡,我們添加了 uppercase 過濾器以全部大寫字母列印學生姓名。
Enter first name:<input type = "text" ng-model = "student.firstName"> Enter last name: <input type = "text" ng-model = "student.lastName"> Name in Upper Case: {{student.fullName() | uppercase}}
lowercase 過濾器
使用管道字元將 lowercase 過濾器新增到表示式中。在這裡,我們添加了 lowercase 過濾器以全部小寫字母列印學生姓名。
Enter first name:<input type = "text" ng-model = "student.firstName"> Enter last name: <input type = "text" ng-model = "student.lastName"> Name in Lower Case: {{student.fullName() | lowercase}}
currency 過濾器
使用管道字元將 currency 過濾器新增到返回數字的表示式中。在這裡,我們添加了 currency 過濾器以使用貨幣格式列印費用。
Enter fees: <input type = "text" ng-model = "student.fees"> fees: {{student.fees | currency}}
filter 過濾器
要僅顯示所需的科目,我們使用了 subjectName 作為過濾器。
Enter subject: <input type = "text" ng-model = "subjectName"> Subject: <ul> <li ng-repeat = "subject in student.subjects | filter: subjectName"> {{ subject.name + ', marks:' + subject.marks }} </li> </ul>
orderby 過濾器
要按分數對科目進行排序,我們使用了 orderBy 分數。
Subject: <ul> <li ng-repeat = "subject in student.subjects | orderBy:'marks'"> {{ subject.name + ', marks:' + subject.marks }} </li> </ul>
示例
以下示例將展示所有上述過濾器。
testAngularJS.htm
<html> <head> <title>Angular JS Filters</title> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "studentController"> <table border = "0"> <tr> <td>Enter first name:</td> <td><input type = "text" ng-model = "student.firstName"></td> </tr> <tr> <td>Enter last name: </td> <td><input type = "text" ng-model = "student.lastName"></td> </tr> <tr> <td>Enter fees: </td> <td><input type = "text" ng-model = "student.fees"></td> </tr> <tr> <td>Enter subject: </td> <td><input type = "text" ng-model = "subjectName"></td> </tr> </table> <br/> <table border = "0"> <tr> <td>Name in Upper Case: </td><td>{{student.fullName() | uppercase}}</td> </tr> <tr> <td>Name in Lower Case: </td><td>{{student.fullName() | lowercase}}</td> </tr> <tr> <td>fees: </td><td>{{student.fees | currency}} </td> </tr> <tr> <td>Subject:</td> <td> <ul> <li ng-repeat = "subject in student.subjects | filter: subjectName |orderBy:'marks'"> {{ subject.name + ', marks:' + subject.marks }} </li> </ul> </td> </tr> </table> </div> <script> var mainApp = angular.module("mainApp", []); mainApp.controller('studentController', function($scope) { $scope.student = { firstName: "Mahesh", lastName: "Parashar", fees:500, subjects:[ {name:'Physics',marks:70}, {name:'Chemistry',marks:80}, {name:'Math',marks:65} ], fullName: function() { var studentObject; studentObject = $scope.student; return studentObject.firstName + " " + studentObject.lastName; } }; }); </script> </body> </html>
輸出
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 表格
表資料通常本質上是可重複的。ng-repeat 指令可用於輕鬆繪製表格。以下示例說明了使用 ng-repeat 指令繪製表格。
<table> <tr> <th>Name</th> <th>Marks</th> </tr> <tr ng-repeat = "subject in student.subjects"> <td>{{ subject.name }}</td> <td>{{ subject.marks }}</td> </tr> </table>
可以使用 CSS 樣式設定表格樣式。
<style> table, th , td { border: 1px solid grey; border-collapse: collapse; padding: 5px; } table tr:nth-child(odd) { background-color: #f2f2f2; } table tr:nth-child(even) { background-color: #ffffff; } </style>
示例
以下示例將展示所有上述指令。
testAngularJS.htm
<html> <head> <title>Angular JS Table</title> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <style> table, th , td { border: 1px solid grey; border-collapse: collapse; padding: 5px; } table tr:nth-child(odd) { background-color: #f2f2f2; } table tr:nth-child(even) { background-color: #ffffff; } </style> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "studentController"> <table border = "0"> <tr> <td>Enter first name:</td> <td><input type = "text" ng-model = "student.firstName"></td> </tr> <tr> <td>Enter last name: </td> <td> <input type = "text" ng-model = "student.lastName"> </td> </tr> <tr> <td>Name: </td> <td>{{student.fullName()}}</td> </tr> <tr> <td>Subject:</td> <td> <table> <tr> <th>Name</th>. <th>Marks</th> </tr> <tr ng-repeat = "subject in student.subjects"> <td>{{ subject.name }}</td> <td>{{ subject.marks }}</td> </tr> </table> </td> </tr> </table> </div> <script> var mainApp = angular.module("mainApp", []); mainApp.controller('studentController', function($scope) { $scope.student = { firstName: "Mahesh", lastName: "Parashar", fees:500, subjects:[ {name:'Physics',marks:70}, {name:'Chemistry',marks:80}, {name:'Math',marks:65}, {name:'English',marks:75}, {name:'Hindi',marks:67} ], fullName: function() { var studentObject; studentObject = $scope.student; return studentObject.firstName + " " + studentObject.lastName; } }; }); </script> </body> </html>
輸出
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - HTML DOM
以下指令可用於將應用程式資料繫結到 HTML DOM 元素的屬性。
序號 | 名稱和說明 |
---|---|
1 | ng-disabled 停用給定的控制元件。 |
2 | ng-show 顯示給定的控制元件。 |
3 | ng-hide 隱藏給定的控制元件。 |
4 | ng-click 表示 AngularJS 點選事件。 |
ng-disabled 指令
將 ng-disabled 屬性新增到 HTML 按鈕並傳遞模型。將模型繫結到複選框並檢視變化。
<input type = "checkbox" ng-model = "enableDisableButton">Disable Button <button ng-disabled = "enableDisableButton">Click Me!</button>
ng-show 指令
將 ng-show 屬性新增到 HTML 按鈕並傳遞模型。將模型繫結到複選框並檢視變化。
<input type = "checkbox" ng-model = "showHide1">Show Button <button ng-show = "showHide1">Click Me!</button>
ng-hide 指令
將 ng-hide 屬性新增到 HTML 按鈕並傳遞模型。將模型繫結到複選框並檢視變化。
<input type = "checkbox" ng-model = "showHide2">Hide Button <button ng-hide = "showHide2">Click Me!</button>
ng-click 指令
將 ng-click 屬性新增到 HTML 按鈕並更新模型。將模型繫結到 html 並檢視變化。
<p>Total click: {{ clickCounter }}</p> <button ng-click = "clickCounter = clickCounter + 1">Click Me!</button>
示例
以下示例將展示所有上述指令。
testAngularJS.htm
<html> <head> <title>AngularJS HTML DOM</title> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = ""> <table border = "0"> <tr> <td><input type = "checkbox" ng-model = "enableDisableButton">Disable Button</td> <td><button ng-disabled = "enableDisableButton">Click Me!</button></td> </tr> <tr> <td><input type = "checkbox" ng-model = "showHide1">Show Button</td> <td><button ng-show = "showHide1">Click Me!</button></td> </tr> <tr> <td><input type = "checkbox" ng-model = "showHide2">Hide Button</td> <td><button ng-hide = "showHide2">Click Me!</button></td> </tr> <tr> <td><p>Total click: {{ clickCounter }}</p></td> <td><button ng-click = "clickCounter = clickCounter + 1">Click Me!</button></td> </tr> </table> </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> </body> </html>
輸出
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 模組
AngularJS 支援模組化方法。模組用於分離邏輯(例如服務、控制器、應用程式等)並保持程式碼整潔。我們在單獨的 js 檔案中定義模組,並根據模組的 js 檔案命名它們。在此示例中,我們將建立兩個模組。
應用程式模組 - 用於使用控制器初始化應用程式。
控制器模組 - 用於定義控制器。
應用程式模組
mainApp.js
var mainApp = angular.module("mainApp", []);
在這裡,我們使用 angular.module 函式聲明瞭一個應用程式 mainApp 模組。我們向它傳遞了一個空陣列。此陣列通常包含依賴模組。
控制器模組
studentController.js
mainApp.controller("studentController", function($scope) { $scope.student = { firstName: "Mahesh", lastName: "Parashar", fees:500, subjects:[ {name:'Physics',marks:70}, {name:'Chemistry',marks:80}, {name:'Math',marks:65}, {name:'English',marks:75}, {name:'Hindi',marks:67} ], fullName: function() { var studentObject; studentObject = $scope.student; return studentObject.firstName + " " + studentObject.lastName; } }; });
在這裡,我們使用 mainApp.controller 函式聲明瞭一個控制器 studentController 模組。
使用模組
<div ng-app = "mainApp" ng-controller = "studentController"> ... <script src = "mainApp.js"></script> <script src = "studentController.js"></script> </div>
在這裡,我們使用 ng-app 指令使用了應用程式模組,使用 ng-controller 指令使用了控制器。我們在主 html 頁面中匯入了 mainApp.js 和 studentController.js。
示例
以下示例將展示所有上述模組。
testAngularJS.htm
<html> <head> <title>Angular JS Modules</title> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <script src = "/angularjs/src/module/mainApp.js"></script> <script src = "/angularjs/src/module/studentController.js"></script> <style> table, th , td { border: 1px solid grey; border-collapse: collapse; padding: 5px; } table tr:nth-child(odd) { background-color: #f2f2f2; } table tr:nth-child(even) { background-color: #ffffff; } </style> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "studentController"> <table border = "0"> <tr> <td>Enter first name:</td> <td><input type = "text" ng-model = "student.firstName"></td> </tr> <tr> <td>Enter last name: </td> <td><input type = "text" ng-model = "student.lastName"></td> </tr> <tr> <td>Name: </td> <td>{{student.fullName()}}</td> </tr> <tr> <td>Subject:</td> <td> <table> <tr> <th>Name</th> <th>Marks</th> </tr> <tr ng-repeat = "subject in student.subjects"> <td>{{ subject.name }}</td> <td>{{ subject.marks }}</td> </tr> </table> </td> </tr> </table> </div> </body> </html>
mainApp.js
var mainApp = angular.module("mainApp", []);
studentController.js
mainApp.controller("studentController", function($scope) { $scope.student = { firstName: "Mahesh", lastName: "Parashar", fees:500, subjects:[ {name:'Physics',marks:70}, {name:'Chemistry',marks:80}, {name:'Math',marks:65}, {name:'English',marks:75}, {name:'Hindi',marks:67} ], fullName: function() { var studentObject; studentObject = $scope.student; return studentObject.firstName + " " + studentObject.lastName; } }; });
輸出
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 表單
AngularJS 增強了表單填寫和驗證。我們可以使用 ng-click 處理按鈕上的 AngularJS 點選,並使用 $dirty 和 $invalid 標誌以無縫的方式進行驗證。在表單宣告中使用 novalidate 停用任何瀏覽器特定的驗證。表單控制元件大量使用 Angular 事件。讓我們先快速瞭解一下事件。
事件
AngularJS 提供了多個可以與 HTML 控制元件關聯的事件。例如,ng-click 通常與按鈕關聯。以下是 Angular JS 中支援的事件。
- ng-click
- ng-dbl-click
- ng-mousedown
- ng-mouseup
- ng-mouseenter
- ng-mouseleave
- ng-mousemove
- ng-mouseover
- ng-keydown
- ng-keyup
- ng-keypress
- ng-change
ng-click
使用按鈕的 on-click 指令重置表單資料。
<input name = "firstname" type = "text" ng-model = "firstName" required> <input name = "lastname" type = "text" ng-model = "lastName" required> <input name = "email" type = "email" ng-model = "email" required> <button ng-click = "reset()">Reset</button> <script> function studentController($scope) { $scope.reset = function() { $scope.firstName = "Mahesh"; $scope.lastName = "Parashar"; $scope.email = "MaheshParashar@tutorialspoint.com"; } $scope.reset(); } </script>
驗證資料
以下可用於跟蹤錯誤。
$dirty - 表示值已更改。
$invalid - 表示輸入的值無效。
$error - 表示確切的錯誤。
示例
以下示例將展示所有上述指令。
testAngularJS.htm
<html> <head> <title>Angular JS Forms</title> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <style> table, th , td { border: 1px solid grey; border-collapse: collapse; padding: 5px; } table tr:nth-child(odd) { background-color: #f2f2f2; } table tr:nth-child(even) { background-color: #ffffff; } </style> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "studentController"> <form name = "studentForm" novalidate> <table border = "0"> <tr> <td>Enter first name:</td> <td><input name = "firstname" type = "text" ng-model = "firstName" required> <span style = "color:red" ng-show = "studentForm.firstname.$dirty && studentForm.firstname.$invalid"> <span ng-show = "studentForm.firstname.$error.required">First Name is required.</span> </span> </td> </tr> <tr> <td>Enter last name: </td> <td><input name = "lastname" type = "text" ng-model = "lastName" required> <span style = "color:red" ng-show = "studentForm.lastname.$dirty && studentForm.lastname.$invalid"> <span ng-show = "studentForm.lastname.$error.required">Last Name is required.</span> </span> </td> </tr> <tr> <td>Email: </td><td><input name = "email" type = "email" ng-model = "email" length = "100" required> <span style = "color:red" ng-show = "studentForm.email.$dirty && studentForm.email.$invalid"> <span ng-show = "studentForm.email.$error.required">Email is required.</span> <span ng-show = "studentForm.email.$error.email">Invalid email address.</span> </span> </td> </tr> <tr> <td> <button ng-click = "reset()">Reset</button> </td> <td> <button ng-disabled = "studentForm.firstname.$dirty && studentForm.firstname.$invalid || studentForm.lastname.$dirty && studentForm.lastname.$invalid || studentForm.email.$dirty && studentForm.email.$invalid" ng-click="submit()">Submit</button> </td> </tr> </table> </form> </div> <script> var mainApp = angular.module("mainApp", []); mainApp.controller('studentController', function($scope) { $scope.reset = function() { $scope.firstName = "Mahesh"; $scope.lastName = "Parashar"; $scope.email = "MaheshParashar@tutorialspoint.com"; } $scope.reset(); }); </script> </body> </html>
輸出
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 包含
HTML 不支援在 html 頁面中嵌入 html 頁面。要實現此功能,可以使用以下方法:
使用 Ajax - 進行伺服器呼叫以獲取相應的 html 頁面,並將其設定為 html 控制元件的 innerHTML。
使用伺服器端包含 - JSP、PHP 和其他 Web 伺服器端技術可以在動態頁面中包含 html 頁面。
使用 AngularJS,我們可以使用 ng-include 指令在 HTML 頁面中嵌入 HTML 頁面。
<div ng-app = "" ng-controller = "studentController"> <div ng-include = "'main.htm'"></div> <div ng-include = "'subjects.htm'"></div> </div>
示例
tryAngularJS.htm
<html> <head> <title>Angular JS Includes</title> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> <style> table, th , td { border: 1px solid grey; border-collapse: collapse; padding: 5px; } table tr:nth-child(odd) { background-color: #f2f2f2; } table tr:nth-child(even) { background-color: #ffffff; } </style> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "studentController"> <div ng-include = "'/angularjs/src/include/main.htm'"></div> <div ng-include = "'/angularjs/src/include/subjects.htm'"></div> </div> <script> var mainApp = angular.module("mainApp", []); mainApp.controller('studentController', function($scope) { $scope.student = { firstName: "Mahesh", lastName: "Parashar", fees:500, subjects:[ {name:'Physics',marks:70}, {name:'Chemistry',marks:80}, {name:'Math',marks:65}, {name:'English',marks:75}, {name:'Hindi',marks:67} ], fullName: function() { var studentObject; studentObject = $scope.student; return studentObject.firstName + " " + studentObject.lastName; } }; }); </script> </body> </html>
main.htm
<table border = "0"> <tr> <td>Enter first name:</td> <td><input type = "text" ng-model = "student.firstName"></td> </tr> <tr> <td>Enter last name: </td> <td><input type = "text" ng-model = "student.lastName"></td> </tr> <tr> <td>Name: </td> <td>{{student.fullName()}}</td> </tr> </table>
subjects.htm
<p>Subjects:</p> <table> <tr> <th>Name</th> <th>Marks</th> </tr> <tr ng-repeat = "subject in student.subjects"> <td>{{ subject.name }}</td> <td>{{ subject.marks }}</td> </tr> </table>
輸出
要執行此示例,您需要將 textAngularJS.htm、main.htm 和 subjects.htm 部署到 Web 伺服器。使用伺服器的 URL 在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - Ajax
AngularJS 提供了 $https: 控制元件,它充當服務從伺服器讀取資料。伺服器進行資料庫呼叫以獲取所需記錄。AngularJS 需要 JSON 格式的資料。一旦資料準備就緒,就可以使用 $https: 以以下方式從伺服器獲取資料:
function studentController($scope,$https:) { var url = "data.txt"; $https:.get(url).success( function(response) { $scope.students = response; }); }
這裡,檔案 data.txt 包含學生記錄。$https: 服務進行 ajax 呼叫並將響應設定為其屬性 students。students 模型可用於在 HTML 中繪製表格。
示例
data.txt
[ { "Name" : "Mahesh Parashar", "RollNo" : 101, "Percentage" : "80%" }, { "Name" : "Dinkar Kad", "RollNo" : 201, "Percentage" : "70%" }, { "Name" : "Robert", "RollNo" : 191, "Percentage" : "75%" }, { "Name" : "Julian Joe", "RollNo" : 111, "Percentage" : "77%" } ]
testAngularJS.htm
<html> <head> <title>Angular JS Includes</title> <style> table, th , td { border: 1px solid grey; border-collapse: collapse; padding: 5px; } table tr:nth-child(odd) { background-color: #f2f2f2; } table tr:nth-child(even) { background-color: #ffffff; } </style> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "" ng-controller = "studentController"> <table> <tr> <th>Name</th> <th>Roll No</th> <th>Percentage</th> </tr> <tr ng-repeat = "student in students"> <td>{{ student.Name }}</td> <td>{{ student.RollNo }}</td> <td>{{ student.Percentage }}</td> </tr> </table> </div> <script> function studentController($scope,$http) { var url = "data.txt"; $http.get(url).then( function(response) { $scope.students = response.data; }); } </script> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"> </script> </body> </html>
輸出
要執行此示例,您需要將 testAngularJS.htm 和 data.txt 檔案部署到 Web 伺服器。使用伺服器的 URL 在 Web 瀏覽器中開啟檔案 testAngularJS.htm 並檢視結果。
AngularJS - 檢視
AngularJS 透過單個頁面上的多個檢視支援單頁應用程式。為此,AngularJS 提供了 ng-view 和 ng-template 指令和 $routeProvider 服務。
ng-view
ng-view 標籤僅建立一個佔位符,根據配置,可以在其中放置相應的檢視(html 或 ng-template 檢視)。
用法
在主模組中定義一個帶有 ng-view 的 div。
<div ng-app = "mainApp"> ... <div ng-view></div> </div>
ng-template
ng-template 指令用於使用 script 標籤建立 HTML 檢視。它包含一個 "id" 屬性,該屬性由 $routeProvider 用於將檢視與控制器對映。
用法
在主模組中定義一個型別為 ng-template 的 script 塊。
<div ng-app = "mainApp"> ... <script type = "text/ng-template" id = "addStudent.htm"> <h2> Add Student </h2> {{message}} </script> </div>
$routeProvider
$routeProvider 是一個關鍵服務,它設定 URL 的配置,將它們與相應的 HTML 頁面或 ng-template 對映,並附加一個與其對應的控制器。
用法
定義一個包含主模組的 script 塊並設定路由配置。
var mainApp = angular.module("mainApp", ['ngRoute']); mainApp.config(['$routeProvider', function($routeProvider) { $routeProvider .when('/addStudent', { templateUrl: 'addStudent.htm', controller: 'AddStudentController' }) .when('/viewStudents', { templateUrl: 'viewStudents.htm', controller: 'ViewStudentsController' }) .otherwise ({ redirectTo: '/addStudent' }); }]);
以下是上述示例中需要考慮的重要事項。
$routeProvider 在 mainApp 模組的 config 下定義為一個函式,使用 '$routeProvider' 作為鍵。
$routeProvider.when 定義了一個 URL "/addStudent",然後將其對映到 "addStudent.htm"。addStudent.htm 應位於與主 HTML 頁面相同的路徑下。如果未定義 htm 頁面,則應使用 id="addStudent.htm" 的 ng-template。我們使用了 ng-template。
"otherwise" 用於設定預設檢視。
"controller" 用於為檢視設定相應的控制器。
示例
以下示例將展示所有上述指令。
testAngularJS.htm
<html> <head> <title>Angular JS Views</title> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-route.min.js"> </script> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp"> <p><a href = "#addStudent">Add Student</a></p> <p><a href = "#viewStudents">View Students</a></p> <div ng-view></div> <script type = "text/ng-template" id = "addStudent.htm"> <h2> Add Student </h2> {{message}} </script> <script type = "text/ng-template" id = "viewStudents.htm"> <h2> View Students </h2> {{message}} </script> </div> <script> var mainApp = angular.module("mainApp", ['ngRoute']); mainApp.config(['$routeProvider', function($routeProvider) { $routeProvider .when('/addStudent', { templateUrl: 'addStudent.htm', controller: 'AddStudentController' }) .when('/viewStudents', { templateUrl: 'viewStudents.htm', controller: 'ViewStudentsController' }) .otherwise({ redirectTo: '/addStudent' }); }]); mainApp.controller('AddStudentController', function($scope) { $scope.message = "This page will be used to display add student form"; }); mainApp.controller('ViewStudentsController', function($scope) { $scope.message = "This page will be used to display all the students"; }); </script> </body> </html>
結果
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 作用域
Scope 是一個特殊的 JavaScript 物件,它起著連線控制器和檢視的作用。Scope 包含模型資料。在控制器中,模型資料透過 $scope 物件訪問。
<script> var mainApp = angular.module("mainApp", []); mainApp.controller("shapeController", function($scope) { $scope.message = "In shape controller"; $scope.type = "Shape"; }); </script>
以下是上述示例中需要考慮的重要事項。
$scope 在控制器建構函式定義期間作為第一個引數傳遞給控制器。
$scope.message 和 $scope.type 是將在 HTML 頁面中使用的模型。
我們已將值設定為模型,這些值將反映在控制器為 shapeController 的應用程式模組中。
我們也可以在 $scope 中定義函式。
Scope 繼承
Scope 是控制器特定的。如果我們定義巢狀控制器,則子控制器將繼承其父控制器的 Scope。
<script> var mainApp = angular.module("mainApp", []); mainApp.controller("shapeController", function($scope) { $scope.message = "In shape controller"; $scope.type = "Shape"; }); mainApp.controller("circleController", function($scope) { $scope.message = "In circle controller"; }); </script>
以下是上述示例中需要考慮的重要事項。
我們已將值設定為 shapeController 中的模型。
我們已在子控制器 circleController 中覆蓋了 message。當在 circleController 的模組中使用 "message" 時,將使用覆蓋後的 message。
示例
以下示例將展示所有上述指令。
testAngularJS.htm
<html> <head> <title>Angular JS Forms</title> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "shapeController"> <p>{{message}} <br/> {{type}} </p> <div ng-controller = "circleController"> <p>{{message}} <br/> {{type}} </p> </div> <div ng-controller = "squareController"> <p>{{message}} <br/> {{type}} </p> </div> </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> <script> var mainApp = angular.module("mainApp", []); mainApp.controller("shapeController", function($scope) { $scope.message = "In shape controller"; $scope.type = "Shape"; }); mainApp.controller("circleController", function($scope) { $scope.message = "In circle controller"; }); mainApp.controller("squareController", function($scope) { $scope.message = "In square controller"; $scope.type = "Square"; }); </script> </body> </html>
結果
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 服務
AngularJS 使用服務架構支援“關注點分離”的概念。服務是 JavaScript 函式,僅負責執行特定任務。這使它們成為一個可維護和可測試的獨立實體。控制器、過濾器可以根據需要呼叫它們。服務通常使用 AngularJS 的依賴注入機制注入。
AngularJS 提供了許多內建服務,例如 $https:、$route、$window、$location 等。每個服務負責一項特定任務,例如,$https: 用於進行 Ajax 呼叫以獲取伺服器資料。$route 用於定義路由資訊,依此類推。內建服務始終以 $ 符號作為字首。
建立服務有兩種方法。
- 工廠
- 服務
使用工廠方法
使用工廠方法,我們首先定義一個工廠,然後為其分配方法。
var mainApp = angular.module("mainApp", []); mainApp.factory('MathService', function() { var factory = {}; factory.multiply = function(a, b) { return a * b } return factory; });
使用服務方法
使用服務方法,我們定義一個服務,然後為其分配方法。我們還將一個已有的服務注入其中。
mainApp.service('CalcService', function(MathService) { this.square = function(a) { return MathService.multiply(a,a); } });
示例
以下示例將展示所有上述指令。
testAngularJS.htm
<html> <head> <title>Angular JS Services</title> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "CalcController"> <p>Enter a number: <input type = "number" ng-model = "number" /></p> <button ng-click = "square()">X<sup>2</sup></button> <p>Result: {{result}}</p> </div> <script> var mainApp = angular.module("mainApp", []); mainApp.factory('MathService', function() { var factory = {}; factory.multiply = function(a, b) { return a * b } return factory; }); mainApp.service('CalcService', function(MathService) { this.square = function(a) { return MathService.multiply(a,a); } }); mainApp.controller('CalcController', function($scope, CalcService) { $scope.square = function() { $scope.result = CalcService.square($scope.number); } }); </script> </body> </html>
結果
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 依賴注入
依賴注入是一種軟體設計模式,其中元件被賦予它們的依賴項,而不是在元件內部硬編碼它們。這使元件免於查詢依賴項,並使依賴項可配置。這有助於使元件可重用、可維護和可測試。
AngularJS 提供了一種卓越的依賴注入機制。它提供以下核心元件,這些元件可以相互注入作為依賴項。
- 值
- 工廠
- 服務
- 提供程式
- 常量
值
值是簡單的 JavaScript 物件,它用於在配置階段將值傳遞給控制器。
//define a module var mainApp = angular.module("mainApp", []); //create a value object as "defaultInput" and pass it a data. mainApp.value("defaultInput", 5); ... //inject the value in the controller using its name "defaultInput" mainApp.controller('CalcController', function($scope, CalcService, defaultInput) { $scope.number = defaultInput; $scope.result = CalcService.square($scope.number); $scope.square = function() { $scope.result = CalcService.square($scope.number); } });
工廠
工廠是一個用於返回值的函式。它根據需要建立值,無論何時服務或控制器需要它。它通常使用工廠函式來計算和返回值。
//define a module var mainApp = angular.module("mainApp", []); //create a factory "MathService" which provides a method multiply to return multiplication of two numbers mainApp.factory('MathService', function() { var factory = {}; factory.multiply = function(a, b) { return a * b } return factory; }); //inject the factory "MathService" in a service to utilize the multiply method of factory. mainApp.service('CalcService', function(MathService) { this.square = function(a) { return MathService.multiply(a,a); } }); ...
服務
服務是一個包含一組函式以執行某些任務的單例 JavaScript 物件。服務使用 service() 函式定義,然後注入到控制器中。
//define a module var mainApp = angular.module("mainApp", []); ... //create a service which defines a method square to return square of a number. mainApp.service('CalcService', function(MathService) { this.square = function(a) { return MathService.multiply(a,a); } }); //inject the service "CalcService" into the controller mainApp.controller('CalcController', function($scope, CalcService, defaultInput) { $scope.number = defaultInput; $scope.result = CalcService.square($scope.number); $scope.square = function() { $scope.result = CalcService.square($scope.number); } });
提供程式
提供程式由 AngularJS 在內部用於在配置階段建立服務、工廠等(AngularJS 自舉的階段)。下面提到的指令碼可用於建立我們之前建立的 MathService。提供程式是一種特殊的工廠方法,它帶有一個 get() 方法,用於返回值/服務/工廠。
//define a module var mainApp = angular.module("mainApp", []); ... //create a service using provider which defines a method square to return square of a number. mainApp.config(function($provide) { $provide.provider('MathService', function() { this.$get = function() { var factory = {}; factory.multiply = function(a, b) { return a * b; } return factory; }; }); });
常量
常量用於在配置階段傳遞值,考慮到值不能用於在配置階段傳遞。
mainApp.constant("configParam", "constant value");
示例
以下示例將展示所有上述指令。
testAngularJS.htm
<html> <head> <title>AngularJS Dependency Injection</title> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "CalcController"> <p>Enter a number: <input type = "number" ng-model = "number" /></p> <button ng-click = "square()">X<sup>2</sup></button> <p>Result: {{result}}</p> </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> <script> var mainApp = angular.module("mainApp", []); mainApp.config(function($provide) { $provide.provider('MathService', function() { this.$get = function() { var factory = {}; factory.multiply = function(a, b) { return a * b; } return factory; }; }); }); mainApp.value("defaultInput", 5); mainApp.factory('MathService', function() { var factory = {}; factory.multiply = function(a, b) { return a * b; } return factory; }); mainApp.service('CalcService', function(MathService) { this.square = function(a) { return MathService.multiply(a,a); } }); mainApp.controller('CalcController', function($scope, CalcService, defaultInput) { $scope.number = defaultInput; $scope.result = CalcService.square($scope.number); $scope.square = function() { $scope.result = CalcService.square($scope.number); } }); </script> </body> </html>
結果
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 自定義指令
自定義指令用於在 AngularJS 中擴充套件 HTML 的功能。自定義指令使用 "directive" 函式定義。自定義指令簡單地替換啟用它的元素。AngularJS 應用程式在引導期間查詢匹配的元素,並使用自定義指令的 compile() 方法執行一次性活動,然後根據指令的 Scope 使用自定義指令的 link() 方法處理元素。AngularJS 支援為以下型別的元素建立自定義指令。
元素指令 - 當遇到匹配的元素時,指令被啟用。
屬性 - 當遇到匹配的屬性時,指令被啟用。
CSS - 當遇到匹配的 CSS 樣式時,指令被啟用。
註釋 - 當遇到匹配的註釋時,指令被啟用。
理解自定義指令
定義自定義 HTML 標籤。
<student name = "Mahesh"></student><br/> <student name = "Piyush"></student>
定義自定義指令來處理上述自定義 HTML 標籤。
var mainApp = angular.module("mainApp", []); //Create a directive, first parameter is the html element to be attached. //We are attaching student html tag. //This directive will be activated as soon as any student element is encountered in html mainApp.directive('student', function() { //define the directive object var directive = {}; //restrict = E, signifies that directive is Element directive directive.restrict = 'E'; //template replaces the complete element with its text. directive.template = "Student: <b>{{student.name}}</b> , Roll No: <b>{{student.rollno}}</b>"; //scope is used to distinguish each student element based on criteria. directive.scope = { student : "=name" } //compile is called during application initialization. AngularJS calls it once when html page is loaded. directive.compile = function(element, attributes) { element.css("border", "1px solid #cccccc"); //linkFunction is linked with each element with scope to get the element specific data. var linkFunction = function($scope, element, attributes) { element.html("Student: <b>"+$scope.student.name +"</b> , Roll No: <b>"+$scope.student.rollno+"</b><br/>"); element.css("background-color", "#ff00ff"); } return linkFunction; } return directive; });
定義控制器來更新指令的 Scope。這裡我們使用 name 屬性的值作為 Scope 的子項。
mainApp.controller('StudentController', function($scope) { $scope.Mahesh = {}; $scope.Mahesh.name = "Mahesh Parashar"; $scope.Mahesh.rollno = 1; $scope.Piyush = {}; $scope.Piyush.name = "Piyush Parashar"; $scope.Piyush.rollno = 2; });
示例
<html> <head> <title>Angular JS Custom Directives</title> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "StudentController"> <student name = "Mahesh"></student><br/> <student name = "Piyush"></student> </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> <script> var mainApp = angular.module("mainApp", []); mainApp.directive('student', function() { var directive = {}; directive.restrict = 'E'; directive.template = "Student: <b>{{student.name}}</b> , Roll No: <b>{{student.rollno}}</b>"; directive.scope = { student : "=name" } directive.compile = function(element, attributes) { element.css("border", "1px solid #cccccc"); var linkFunction = function($scope, element, attributes) { element.html("Student: <b>"+$scope.student.name +"</b> , Roll No: <b>"+$scope.student.rollno+"</b><br/>"); element.css("background-color", "#ff00ff"); } return linkFunction; } return directive; }); mainApp.controller('StudentController', function($scope) { $scope.Mahesh = {}; $scope.Mahesh.name = "Mahesh Parashar"; $scope.Mahesh.rollno = 1; $scope.Piyush = {}; $scope.Piyush.name = "Piyush Parashar"; $scope.Piyush.rollno = 2; }); </script> </body> </html>
結果
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 國際化
AngularJS 支援三種類型的內建國際化過濾器:貨幣、日期和數字。我們只需要根據國家/地區的語言環境合併相應的 js。預設情況下,它處理瀏覽器的語言環境。例如,要使用丹麥語語言環境,請使用以下指令碼。
<script src = "https://code.angularjs.org/1.2.5/i18n/angular-locale_da-dk.js"> </script>
使用丹麥語語言環境的示例
testAngularJS.htm
<html> <head> <title>Angular JS Forms</title> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "StudentController"> {{fees | currency }} <br/><br/> {{admissiondate | date }} <br/><br/> {{rollno | number }} </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> <script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js"> </script> <script> var mainApp = angular.module("mainApp", []); mainApp.controller('StudentController', function($scope) { $scope.fees = 100; $scope.admissiondate = new Date(); $scope.rollno = 123.45; }); </script> </body> </html>
結果
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
使用瀏覽器語言環境的示例
testAngularJS.htm
<html> <head> <title>Angular JS Forms</title> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "StudentController"> {{fees | currency }} <br/><br/> {{admissiondate | date }} <br/><br/> {{rollno | number }} </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> <!-- <script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js"> </script> --> <script> var mainApp = angular.module("mainApp", []); mainApp.controller('StudentController', function($scope) { $scope.fees = 100; $scope.admissiondate = new Date(); $scope.rollno = 123.45; }); </script> </body> </html>
結果
在 Web 瀏覽器中開啟 textAngularJS.htm。檢視結果。
AngularJS - 國際化
AngularJS 支援三種類型的內建國際化過濾器:貨幣、日期和數字。我們只需要根據國家/地區的語言環境合併相應的 JavaScript。預設情況下,它會考慮瀏覽器的語言環境。例如,對於丹麥語語言環境,請使用以下指令碼 -
<script src = "https://code.angularjs.org/1.2.5/i18n/angular-locale_da-dk.js"> </script>
使用丹麥語語言環境的示例
testAngularJS.htm
<html> <head> <title>Angular JS Forms</title> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "StudentController"> {{fees | currency }} <br/><br/> {{admissiondate | date }} <br/><br/> {{rollno | number }} </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> <script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js"> </script> <script> var mainApp = angular.module("mainApp", []); mainApp.controller('StudentController', function($scope) { $scope.fees = 100; $scope.admissiondate = new Date(); $scope.rollno = 123.45; }); </script> </body> </html>
輸出
在 Web 瀏覽器中開啟 testAngularJS.htm 檔案,檢視結果。
使用瀏覽器語言環境的示例
testAngularJS.htm
<html> <head> <title>Angular JS Forms</title> </head> <body> <h2>AngularJS Sample Application</h2> <div ng-app = "mainApp" ng-controller = "StudentController"> {{fees | currency }} <br/><br/> {{admissiondate | date }} <br/><br/> {{rollno | number }} </div> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> <!-- <script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js"> </script> --> <script> var mainApp = angular.module("mainApp", []); mainApp.controller('StudentController', function($scope) { $scope.fees = 100; $scope.admissiondate = new Date(); $scope.rollno = 123.45; }); </script> </body> </html>
輸出
在 Web 瀏覽器中開啟 testAngularJS.htm 檔案,檢視結果。