服务是一个对象或函数,对外提供特定的功能。
1.内置服务
1、$location是对原生Javascript中location对象属性和方法的封装。
app.controller('demoController',['$scope','$location',function($scope,$location){
//绝对路径
$scope.absUrl = $location.absUrl();
//返回url协议
$scope.protocol = $location.protocol();
//返回url服务器使用的端口号
$scope.port = $location.port();
//当前路径
$scope.path = $location.path();
//返回一个url的锚部分:第一个#后面的内容
$scope.hash = $location.hash();
//返回url的查询字符串部分
$scope.search = $location.search();
}]);
2、timeout&interval对原生Javascript中的setTimeout和setInterval进行了封装。
app.controller('demoController',['$scope','$timeout','interval',function($scope,$timeout,$interval){
$timeout(function(){
$scope.time = new Date();
},2000);
$interval(function(){
$scope.time = new Date();
},1000);
}]);
3、$log打印调试信息
app.controller('demoController',['$scope','$log',function($scope,$log){
$log.log('打印信息');
$log.info('普通信息');
$log.warn('警告信息');
$log.error('错误信息');
$log.debug('调试信息');
}]);
4. http用于向服务端发起异步请求。 http的使用方式和jquery提供的$.ajax操作比较相同,均支持多种method的请求,get、post、put、delete等。
//$http本质是对XMLHttperRequest对象封装
app.controller('demoController',['$scope','$http',function($scope,$http){
$http({
url:'example.php',//请求地址
method:'post',//请求方式也可以为get
params:{//会被转换成查询字符串追加在URL后面。如果值不是字符串,会被JSON序列化。
'name':'ari'
//参数会转为?name=ari的形式
},
data:{name:'itcast',age:10},//post传参
header:{//请求头信息
'Content-Type':'application/x-www-form-urlencoded'
}
}).success(function(data,status,headers,config){
//data响应体 status 相应的状态值
headers是头信息的getter函数 ,可以结束一个参数,用来获取对应名字值
config 是用来生成原始请求的完整设置对象。
}).error(function(data,status,headers,config){
//失败回掉
});
}]);
2.自定义服务
通过上面例子得知,所谓服务是将一些通用性的功能逻辑进行封装方便使用,AngularJS允许将自定义服务。
1、factory方法
App.factory('showTime', ['$filter', function ($filter) {
var now = new Date();
now = $filter('date')(now,'yyyy/MM/dd');
return now;
}]);
App.controller('DemoController', ['$scope', 'showTime', function($scope, showTime) {
$scope.now = showTime.now;
}]);
2、service方法
App.service('showTime', ['$filter', function ($filter) {
var now = new Date();
this.now = $filter('date')(now,'yyyy/MM/dd');
}]);
App.controller('DemoController', ['$scope', 'showTime', function($scope, showTime) {
$scope.now = showTime.now;
}]);
3、value方法定义常量 在介绍服务时曾提到服务本质就是一个对象或函数,所以自定义服务就是要返回一个对象或函数以供使用。
app.value('author','itcast');
app.controller('DemoController', ['$scope', 'atuhor',function($scope,author){
$scope.author = author;
}]);