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。