最近開始研究 AngularJS 以後,覺得它能輕鬆做到 『資料綁定』 的這一點真是太猛啦!!
參考 AngularJS 在維基百科有簡單的介紹資料綁定的部分: Angular在呈現和資料中間,可以簡單建立雙向的資料綁定。一旦建立雙向綁定,使用者輸入,會由Angular自動傳到一個變數中,再自動讀到所有綁到它的內容,更新它。效果上就是立即的資料同步。在程式碼中修改變數,也會直接反應到呈現的外觀上。不僅內容可以雙向綁定,其他諸如類別、寬度、高度等等,都可以和變數與使用者的輸入,綁定起來。
實際來做看看每次必做的 Hello World! 了解一下最基本的運用方式!
做完的效果就如下所示:
兩個對話方塊輸入的資料會綁定在下面的 h1 標籤內容,都沒輸入資料的話,預設文字就是 Hello World!
當你輸入資料的時候,修改資料的同時就會直接反應在 h1 的文字上,做到即時更新。
利用 AngularJS,很快就可以做到這個效果,接下來就一步一步的做給大家看。
首先建立一個簡單的 html 。
1
2
3
4
5
6
7
8
9
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>AngularJS</title>
</head>
<body>
</body>
</html>
接著把 AngularJS 引用進來,為了讓樣式好看些,額外再引用了 bootstrap 的樣式。
1
2
3
4
5
6
7
8
9
10
11
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>AngularJS</title>
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular.min.js"></script>
</head>
<body>
</body>
</html>
接著就是幫這個 html 標籤 加上 ng-app 的屬性,這樣做是讓 AngularJS 載入後知道要處理的範圍。
1
2
3
4
5
6
7
8
9
10
11
<!doctype html>
<html ng-app>
<head>
<meta charset="UTF-8">
<title>AngularJS</title>
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular.min.js"></script>
</head>
<body>
</body>
</html>
再來把需要用到的 html 標籤補上去,簡單的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!doctype html>
<html ng-app>
<head>
<meta charset="UTF-8">
<title>AngularJS</title>
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular.min.js"></script>
</head>
<body>
<div class="well span6">
<label>Message</label>
<input type="text" placeholder="Enter a message here">
<label>Name</label>
<input type="text" placeholder="Enter a name here">
<hr>
<h1>Hello World!</h1>
</div>
</body>
</html>
接著就能利用 AngularJS 強大的 ng-model 來進行資料綁定的部分了,我們先幫 input 標籤加上 ng-model 的屬性,並且給這個屬性值,輸入 message 的 input 的 ng-model 屬性值就給他叫做 message, 而輸入 name 的 input 的 ng-model 屬性值就給叫做 name,這樣比較簡單易懂,而這邊的 ng-model 的屬性的值,就把它當成是你自己命名的變數名稱,而這個名稱就可以拿來對應再要綁定資料的地方。
我們希望輸入的資料會綁定在 <h1> 上面, 因此我們就要運用到 AngularJS 的表達式。 <h1> 標籤的內容,我們就可以加上 {{}}兩個大括弧,中間放要綁定的 ng-model 屬性的值,就像這樣 {{message}}。
修改完後的程式碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!doctype html>
<html ng-app>
<head>
<meta charset="UTF-8">
<title>AngularJS</title>
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular.min.js"></script>
</head>
<body>
<div class="well span6">
<label>Message</label>
<input type="text" ng-model="message" placeholder="Enter a message here">
<label>Name</label>
<input type="text" ng-model="name" placeholder="Enter a name here">
<hr>
<h1>{{message}} {{name}}</h1>
</div>
</body>
</html>
做到這裡,在 message 的對話框輸入的內容,已經會綁定在 <h1> 標籤裡面的 {{message}},而在 name 的對話框輸入的內容,已經會綁定在 <h1> 標籤裡面的 {{name}}。
當都沒有輸入資料的時候, h1 空空的好像怪怪的,還沒有輸入任何資料的時候,能不能加上預設值呢?
只要在 {{message}}中再加上 {{ message || “Hello” }},這樣預設 h1 一開始就會顯示出 Hello 的字串, 也幫 name 的部份加上預設值 {{ name || “World!” }},這樣就完成了,完整程式碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<html ng-app>
<head>
<meta charset="UTF-8">
<title>AngularJS - Hello World!</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular.min.js"></script>
<style>
body{
text-align:center;
color:#fff;
}
.well{
background-color:#333;
}
</style>
</head>
<body>
<div class="well">
<label>Message</label>
<input type="text" ng-model="message" placeholder="Enter a message here">
<label>Name</label>
<input type="text" ng-model="name" placeholder="Enter a name here">
<hr>
<h1> {{ message || "Hello" }} {{ name || "World!" }}</h1>
</div>
</body>
</html>
運用 AngularJS 快速的就能做到資料綁定,快點一起試試看這個簡單的例子吧!
程式碼連結: