天天看點

AngularJS 指令

AngularJS 指令

  • AngularJS通過被稱為指令的新屬性來擴充HTML。
  • AngularJS通過内置的指令來為應用添加功能。
  • AngularJS允許你自定義指令。
  • AngularJS 指令是擴充的 HTML 屬性,帶有字首 ng-
  • ng-app 指令初始化一個 AngularJS 應用程式。
  • ng-init 指令初始化應用程式資料。
  • ng-model 指令把元素值(比如輸入域的值)綁定到應用程式 示例代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<div ng-app="" ng-init="firstName=''">

<p>在輸入框中嘗試輸入:</p>
<p>姓名: <input type="text" ng-model="firstName"></p>
<p>你輸入的為: {{ firstName }}</p>

</div>

</body>
</html>
           
  • ng-app 指令告訴 AngularJS,

    元素是 AngularJS 應用程式 的"所有者"。

  • 一個網頁可以包含多個運作在不同元素中的 AngularJS 應用程式。

資料綁定

在下一個執行個體中,兩個文本域是通過兩個 ng-model 指令同步的:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<div data-ng-app="" data-ng-init="quantity=1;price=5">

<h2>價格電腦</h2>

數量: <input type="number" ng-model="quantity">
價格: <input type="number" ng-model="price">

<p><b>總價:</b> {{quantity * price}}</p>

</div>

</body>
</html>
           

重複 HTML 元素

ng-repeat 指令會重複一個 HTML 元素 示例代碼如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<div data-ng-app="" data-ng-init="names=['Jani','Hege','Kai']">
<p>使用 ng-repeat 來循環數組</p>
<ul>
    <li data-ng-repeat="x in names">
    {{ x }}
    </li>
</ul>
</div>

</body>
</html>
           
  • ng-repeat 指令用在一個對象數組上,示例代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<div ng-app="" ng-init="names=[
{name:'Jani',country:'Norway'},
{name:'Hege',country:'Sweden'},
{name:'Kai',country:'Denmark'}]">

<p>循環對象:</p>
<ul>
<li ng-repeat="x in names">
{{ x.name + ', ' + x.country }}</li>
</ul>

</div>

</body>
</html>
           
  • AngularJS 完美支援資料庫的 CRUD(增加Create、讀取Read、更新Update、删除Delete)應用程式。 把執行個體中的對象想象成資料庫中的記錄。

ng-init指令

ng-init指令為AngularJS應用程式定義了初始值。 通常情況下,不使用ng-init。您将使用一個控制器或子產品來代替它。

ng-model指令

  • ng-model指令綁定html元素到應用程式資料。
  • ng-model指令也可以:
    1. 為應用程式資料提供類型驗證(number,email,required)。
    2. 為應用程式資料提供狀态(invalid, dirty, touched, error)
    3. 為HTML元素提供CSS類。
    4. 綁定HTML元素到HTML表單。

ng-repeat指令

ng-repeat指令對于集合中(數組中)的每個項會克隆一次HTML元素。

建立自定義的指令

除了AbgularJS内置的指令外,我們還可以建立自定義指令。 你可以使用 .directive 函數來添加自定義的指令。 要調用自定義指令,HTML 元素上需要添加自定義指令名。 使用駝峰法來命名一個指令, runoobDirective, 但在使用它時需要以 - 分割, runoob-directive: 這裡放一個簡單代碼示例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body ng-app="myApp">

<runoob-directive></runoob-directive>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
    return {
        template : "<h1>自定義指令!</h1>"
    };
});
</script>

</body>
</html>
           

你可以通過以下方式來調用指令:

元素名

屬性

類名

注釋

* 元素名

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body ng-app="myApp">

<runoob-directive></runoob-directive>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
    return {
        template : "<h1>自定義指令!</h1>"
    };
});
</script>

</body>
</html>
           

* 屬性

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body ng-app="myApp">

<div runoob-directive></div>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
    return {
        template : "<h1>自定義指令!</h1>"
    };
});
</script>

</body>
</html>
           

* 類名

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body ng-app="myApp">

<div class="runoob-directive"></div>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
    return {
        restrict : "C",
        template : "<h1>自定義指令!</h1>"
    };
});
</script>

<p><strong>注意:</strong> 你必須設定 <b>restrict</b> 的值為 "C" 才能通過類名來調用指令。</p>

</body>
</html>
           

* 注釋

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body ng-app="myApp">

<!-- directive: runoob-directive -->

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
    return {
        restrict : "M",
        replace : true,
        template : "<h1>自定義指令!</h1>"
    };
});
</script>

<p><strong>注意:</strong> 我們需要在該執行個體添加 <strong>replace</strong> 屬性, 否則評論是不可見的。</p>

<p><strong>注意:</strong> 你必須設定 <b>restrict</b> 的值為 "M" 才能通過注釋來調用指令。</p>

</body>
</html>
           
  • 注意: 我們需要在該執行個體添加 replace 屬性, 否則評論是不可見的(評論是指自定義指令顯示的内容,在這裡是“自定義指令”幾個字)
  • 注意: 你必須設定 restrict 的值為 "M" 才能通過注釋來調用指令。

限制使用

<!DOCTYPE html>
<html><head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body ng-app="myApp">

<runoob-directive></runoob-directive>

<div runoob-directive></div>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
    return {
        restrict : "A",
        template : "<h1>自定義指令!</h1>"
    };
});
</script>

<p><strong>注意:</strong> 通過設定 <strong>restrict</strong> 屬性值為 "A" 來設定指令隻能通過 HTML 元素的屬性來調用。</p>

</body>
</html>
           
  • E 作為元素名使用
  • A 作為屬性使用
  • C 作為類名使用
  • M 作為注釋使用