在AngularJS中, 服务是一个比较重要的部分,它是一个对象或者是函数,可以在你的AngularJS的应用中使用。接下来介绍几种比较常用的内建服务以及自定义服务的方法。
[内建服务]
(1)location服务
location服务返回当前页面的地址,需要注意的是location服务是作为一个参数传递到 controller 中。如果要使用它,需要在 controller 中定义。
>>>代码部分
<body> <div ng-app="myApp" ng-controller="myCtrl"> <p> 当前页面的url:</p> <h3>{{myUrl}}</h3> </div> <p>该实例使用了内建的 $location 服务获取当前页面的 URL。</p> </body> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope, $location) { $scope.myUrl = $location.absUrl(); }); </script> </html>
(2)$http服务
$http服务: 服务向服务器发送请求,应用响应服务器传送过来的数据。
>>>代码部分
1 <div ng-app="myApp" ng-controller="myCtrl"> 2 <p>欢迎信息:</p> 3 <h1>{{myWelcome}}</h1> 4 </div> 5 <p> $http 服务向服务器请求信息,返回的值放入变量 "myWelcome" 中。</p> 6 <script> 7 var app = angular.module('myApp', []); 8 app.controller('myCtrl', function($scope, $http) { 9 $http.get("welcome.htm").then(function (response) { 10 $scope.myWelcome = response.data; 11 }); 12 }); 13 </script>
(3) $timeout服务
AngularJS $timeout 与 JS window.settimeout 函数相对应,实现效果相同
代码如下>>>
1 var app = angular.module('myApp', []); 2 app.controller('myCtrl', function($scope, $timeout) { 3 $scope.myHeader = "Hello World!"; 4 $timeout(function () { 5 $scope.myHeader = "How are you today?"; 6 }, 2000); 7 });
代码所执行的效果是,2s后执行代码。
(4)$interval服务
AngularJS $interval 与 JS window.settimeinterval 函数相对应,实现效果相同
1 var app = angular.module('myApp', []); 2 app.controller('myCtrl', function($scope, $interval) { 3 $scope.theTime = new Date().toLocaleTimeString(); 4 $interval(function () { 5 $scope.theTime = new Date().toLocaleTimeString(); 6 }, 1000); 7 });
【自定义服务】
1、service
1 angular.module("app",[]) 2 .controller("ctrl",function($scope,$hexafy){}) 3 .service('$hexafy', function() { 4 this.$$gongneng = "将转入的数字,转为16进制"; 5 this.myFunc = function (x) { 6 return x.toString(16); 7 } 8 })
2、factory
factory 是一个函数用于返回值,通常我们使用 factory 函数来计算或返回值。(factory使用上,与service差距不大)
1 angular.module("app",[]) 2 .config() 3 .controller("ctrl",function($scope,hexafy){ 4 $scope.gongneng = hexafy.gongneng; 5 $scope.num = hexafy.myFunc(255); 6 }) 7 .factory('hexafy',function(){ 8 var obj = { 9 gongneng : "将转入的数字,转为16进制", 10 myFunc:function(x){ 11 return x.toString(16); 12 } 13 }; 14 return obj; 15 })
3、provider
1、在AngularJS中,Service,factory都是基于provider实现的。
2、在provider中,通过$get()方法提供了factory的写法,用于返回 value/service/factory。;
3、provider是三种自定义服务中,唯一可以写进config配置阶段的一种。
如果服务,必须要在配置阶段执行,那么必须使用provider。否则,一般使用Service或factory
1 .controller("ctrl",function($scope,hexafy){ 2 $scope.gongneng = hexafy.gongneng; 3 $scope.num = hexafy.myFunc(255); 4 }) 5 6 /*定义一个provider服务*/ 7 .provider('hexafy',function(){ 8 //默认使用Service的写法 9 // this.gongneng = "将转入的数字,转为16进制"; 10 this.$get = function(){ 11 var obj = { 12 gongneng : "将转入的数字,转为16进制", 13 myFunc : function(x){ 14 return x.toString(16); 15 } 16 } 17 return obj; 18 } 19 })