在前面我们提到过,最好不去复用controller里面的代码,我们要把里面相同的代码抽出来然后放到service里面
首先我们看一下$http服务
我们先看一下http 的例子
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 29 30 31 32
| <!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="angular.js"></script> </head> <body> <div ng-controller="Ctrl"> <ul> <li ng-repeat="list in lists"> <label>名字</label>:{{list.name}} <label>年龄</label>:{{list.age}} </li> </ul> </div> </body> <script type="text/javascript"> var app = angular.module('app', []) app.controller('Ctrl', ['$scope','$http',function($scope,$http){ $http({ method:'GET', url:'data.json', }).success(function(data,status,headers,config){ $scope.lists = data }).error(function(data,status,headers,config){ }) }]) </script> </html>
|
其中data.json为
1 2 3 4 5 6 7 8 9 10
| [{ "name":"张三丰", "age":24 },{ "name":"张无忌", "age":25 },{ "name":"赵敏", "age":19 }]
|
输出的结果
其中http请求有很多配置,可以到文档里面去看
使用factory封装自己的http服务
下面我们先来看一一个列子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="angular.js"></script> <script src="text.js"></script> </head> <body> <div ng-controller="Ctrl"> <ul> <li ng-repeat="list in lists"> <label>名字</label>:{{list.name}} <label>年龄</label>:{{list.age}} </li> </ul> </div> </body> </html>
|
text.js文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var app = angular.module('app', []) app.factory('CtrlService', ['$http','$q',function($http,$q){ return { getData:function(){ return $http({ method:'GET', url:'data.json', }) } } }]) app.controller('Ctrl', ['$scope','CtrlService',function($scope,CtrlService){ CtrlService.getData().success(function(responseData,status,headers,config){ $scope.lists = responseData }).error(function(responseData,status,headers,config){}) }])
|
输出的结果
我们把http请求封装在factory中,封装成自己的一个service,这样controller就处理业务逻辑,不同的controller都可以调用这个service
service的特性:
1、service都是单例的
2、service由$injector负责实例化
3、service在整个应用的生命周期中存在,可以用来共享数据
4、在需要使用的地方利用依赖注入机制注入service
5、自定义的service需要写在内置的service后面
6、内置service的命名以$符号开头,自定义service应该避免
其中service、provider、factory本质都是provider,只是里面的写法和参数不同
angular中的 constant、value、service、factory、provider的常用几种方法