真正的应用需要和真实的服务器进行交互,无论你是想把数据持久化到云端,还是需要与其他用户进行实时交互,都需要让应用与服务器时进行交互。
为了实现这一点,Angular提供了一个叫做$http的服务。它提供了一个可扩展的抽象方法列表,使得与服务器的交互更加容易。它支持HTTP、JSONP和CORS方式。它还包含了安全性支持,避免JSON格式的脆弱性和XSRF(跨站请求伪造)。它让你可以轻松的转换请求和响应数据,甚至还实现了简单的缓存。
比如说我们已经创建了一个服务器,当查询/products路径时,它会以JSON格式返回一个商品列表。
返回的响应示例如下:
products.json
[ { "id":0, "title":"Paint pots", "description":"Pots full of paint", "price":3.95 }, { "id":1, "title":"Polka dots", "description":"Dots with that polka groove", "price":12.95 }, { "id":2, "title":"Pebbles", "description":"Just little rocks,really", "price":6.95 } ]
模板和控制器如下:
<html ng-app='myApp'> <head> <title>Http实例</title> </head> <body ng-controller='ShoppingController'> <h1>Shop!</h1> <table> <tr ng-repeat="item in items"> <td>{{item.title}}</td> <td>{{item.description}}</td> <td>{{item.price | currency}}</td> </tr> </table> <script src="lib/angular/angular.js"></script> <script> var myApp=angular.module('myApp',[]); myApp.controller('ShoppingController', function($scope, $http) { $http.get('/products').success(function(data, status, headers, config){ $scope.items = data; }); }); </script> </body> </html>
当然,上面的代码由于没有后台的/products服务接口,所以会报404错误。
如果要让上面的代码可以运行,有如下两种方法:
一.在工程下新建一个用于保存json数据的文件
如在WebContent下新建json文件夹,下面建products.json,内容如返回的products.json,然后进一步修改模板和控制器如下:
<html ng-app='myApp'> <head> <title>Http实例</title> </head> <body ng-controller='ShoppingController'> <h1>Shop!</h1> <table> <tr ng-repeat="item in items"> <td>{{item.title}}</td> <td>{{item.description}}</td> <td>{{item.price | currency}}</td> </tr> </table> <script src="lib/angular/angular.js"></script> <script> var myApp=angular.module('myApp',[]); myApp.controller('ShoppingController', function($scope, $http) { $http.get('json/products.json').success(function(data, status, headers, config){ $scope.items = data; }); }); </script> </body> </html>二.采用ngResource方式