Angularjs是一個前端的Javascript MVC 庫和框架,使前端得到更好的設計、維護和測試。它的核心特性有:MVC、雙向數據綁定、指令和語義化標簽、模塊化工具、依賴注入、HTML模板,以及對常用工具的封裝,例如$http、$cookies、$location等。本篇體驗Angularjs在MVC中的基本使用。
通過NuGet,輸入關鍵字Angularjs,安裝"Angular JS Core"。
把angular.js引入頁面:
<script src="~/Scripts/angular.js"></script>
ng-app指令
當Angular找到DOM中含有ng-app指令的元素時,才會進行初始化,並可以調用Angular的其它指令。
<html ng-app>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/angular.js"></script>
<script src="~/Scripts/controller.js"></script>
<link href="~/Content/bootstrap.css" rel="stylesheet" />
</head>
<body>
<div>
<h3>Angular Hello world</h3>
10+2={{10 + 2}}
</div>
</body>
</html>
使用"ng-model"指令進行數據雙向綁定
<div>
<input type="text" placeholder="輸入Name" ng-model="name"/>
{{name}}
</div>
通過ng-model=”name”,把input和頁面顯示實現了雙向綁定。
使用"ng-controller"指令,引入controller
在NuGet中輸入關鍵字bootstrap,安裝在MVC4下的bootstrap。
把bootstrap.cs引入視圖頁。
創建controller.js如下:
var MainController = function($scope) { var model = { Name: "My Books", Books: [ { Title: '陽光踩爛的日子', isComplete: false }, { Title: '那些年', isComplete: false }, { Title: '時間是用來浪費的', isComplete: true } ] }; $scope.readingList = model; };
把controller.js引入視圖頁。Home/Index.cshtml如下:
<html ng-app>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/angular.js"></script>
<script src="~/Scripts/controller.js"></script>
<link href="~/Content/bootstrap.css" rel="stylesheet" />
</head>
<body>
<div ng-controller="MainController">
<div>
<h2>{{readingList.Name}}的閱讀清單</h2>
</div>
<br/>
<div>
<table class="table table-bordered table-condensed">
<thead>
<tr>
<th>標題</th>
<th>是否完成閱讀</th>
<th></th>
</tr>
</thead>
<tbody>
<tr ng-repeat="book in readingList.Books">
<td>{{book.Title}}</td>
<td>{{book.isComplete}}</td>
<td><input type="checkbox" ng-model="book.isComplete"/></td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
當改變checkbox的勾選狀態,isComplete值也在true和false之間切換,這點體現了Angularjs的雙向綁定。
filter實現過濾功能
添加一個Input:
<div>
<input type="text" ng-model="titleFilter" placeholder="輸入關鍵字搜索"/>
</div>
以"|"的形式,給每行添加過濾器:
<tr ng-repeat="book in readingList.Books | filter:titleFilter">
使用"ng-click"指令為DOM元素綁定事件
在controller.js中添加如下:
$scope.addBook = function() { model.Books.push({ Title: $scope.newTitle, isComplete: false }); $scope.newTitle = ''; };
在<div ng-controller="MainController">中添加如下:
<div>
<input type="text" ng-model="newTitle" placeholder="輸入新書名" required>
<input type="button" ng-click="addBook()" value="添加" class="btn" />
</div>
選擇使用Angularjs還是Knockout?
Angular比Knockout承擔了更多的服務端工作,如果使用的框架是輕量級的,比如NodeJS,偏向使用Angular。
如果選擇的框架是ASP.NET,偏向使用Knockout。





