上課時有同學問到說是否能用 JavaScript 做出欄位跟變數是雙向綁定的效果,其實蠻多標榜 MV* 框架基本上都會有支援的,像是筆者現在要介紹的 AngularJS。
AngularJS 是由 Google 開發並進行推廣的,透過簡單的宣告式語法(Directives Syntax)就能立即產生資料綁定的效果,讓加快開發 Web 應用程式的速度及程式的複雜度。說再多可能都很難懂它能做什麼,就讓我們直接來體驗一下什麼是資料綁定吧!
首先準備個簡單的 HTML 內容(practice/index.html):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!doctype html> <html> <head> <meta charset="UTF-8"> <title>男丁格爾's 脫殼玩 - 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>Name:</label> <input type="text" placeholder="Enter a name here"> <hr> <h1>Hello AngularJS!!</h1> </div> </body> </html> |
這邊一樣得先引用 angular.js,接著在 html 標籤中加入 ng-app 的屬性,這樣當 angular.js 載入後自然會知道那個區塊是它要處理的範圍。
1 | <html ng-app> |
然後筆者希望當使用者在輸入方塊輸入任何內容都能取代下面 h1 標籤中的 "AngularJS"。所以呢,先在輸入方塊中加入一個 ng-model 屬性,並指定屬性值為 name。這邊的屬性值你可以先把它當成是變數。
1 | <input type="text" ng-model="name" placeholder="Enter a name here"> |
接著將 h1 中的 "AngularJS" 替換成 Angular 表達式(Angular Expressions),語法為 {{ expression }},其中的 expression 就可以放入像是 ng-model 的屬性值(變數)
1 | <h1>Hello {{ name }}!!</h1> |
最後存檔預覽應該就能看到實際的畫面了:
請試著再輸入方塊中輸入你的名字吧,如果以上過程都正確的話,應該會看到跟筆者很類似的畫面:
啊不過若沒有輸入的話,就只有 "Hello !!" 的字樣,如果想要有個預設值為 "AngularJS" 的話呢?請在 {{ name }} 中多加入個簡單的條件判斷:
1 | {{ name || "AngularJS" }} |
這樣當使用者沒輸入任何名字時,將會預設顯示 "Hello AngularJS!!" 囉!
好啦~接下來就是作業時間囉!請再多新增一個輸入方塊,讓問候語 "Hello" 也能透過輸入的方塊來改變吧!