服務是一個對象或函數(shù),對外提供特定的功能。
1、內置服務
-
$location是對原生Javascript中l(wèi)ocation對象屬性和方法的封裝。
service.controller("DemoController",['$scope','$location',function ($scope,$location) {
// 獲取當前項目的絕對路徑
$scope.absUrl = $location.absUrl();
// 協(xié)議
$scope.protocol= $location.protocol()
// 端口
$scope.port = $location.port()
// 當前路徑
$scope.path = $location.path()
// 主機
$scope.host = $location.host()
// url
$scope.url = $location.url();
}])

在這里注意URL中它是獲取的錨點以后的地址。
-
$filter在控制器中格式化數(shù)據(jù)。
service.controller("DemoController",['$scope','$filter',function ($scope,$filter) {
// $filter是九種過濾器中任何一個
$scope.price = 11.11;
var currency = $filter('currency');
$scope.price = currency($scope.price);
$scope.str = 'hello angular';
var uppercase = $filter('uppercase');
$scope.str = uppercase($scope.str);
$scope.str1 = $filter('limitTo')($scope.str, 2);
}])

過濾器(filter)也可以作為服務,他與我們在視圖(view)中調用過濾器是一樣的,只不過作為服務來講,是在控制器中格式化數(shù)據(jù),而普通的在視圖中就可以調用。
-
$log打印調試信息
service.controller("DemoController",['$scope','$log',function ($scope,$log) {
$log.info('普通信息');
$log.warn('警告信息');
$log.error('錯誤信息');
$log.log('打印信息');
$log.debug('調試信息');
}])

-
$http用于向服務端發(fā)起異步請求(重點)
$http本質上是對XMLHttpRequest對象的封裝,那么原生的的對象要發(fā)送一個請求:
var xhr = new XMLHttpRequest;
// 打開一個鏈接
xhr.open('get/post', 'example.php?name=eurasia');
//設置一個請求頭
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('age=10');
$http是對原生的進行封裝,只要把上面的那些封裝成參數(shù)就可以了,$http(),是一個函數(shù),并不是每次請求的參數(shù)是一樣的,想要變成不一樣的,需要一個參數(shù),請求的方式既可以是get也可以是post,如果完成一個請求需要多個參數(shù)的時候,當一個對象來傳會更方便一些。那么.success是函數(shù)$http()的一個返回值,這樣也表示成功。
$http({
url: 'example.php',
// method: 'get',
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
params: { // get 參數(shù)
name: 'eurasia',
sex: '男'
},
// data: 'age=10'
data: { // post 傳參
age: 10
}
}).success(function (info) {
// info 就是返回的數(shù)據(jù)
$log.info(info);
});
當我們使用get傳參的時候,要放到url后面去,在AngularJs中就不需要寫了,會有一個如下這樣的傳遞方式,最終就會拼接成example.php?name = eurasia這種形式
params: { // get 參數(shù)
name: 'eurasia',
sex: '男'
},
當我們使用post發(fā)送參數(shù)的時候要放到send中,在這專門為send提供了一個參數(shù)data,如下這種方式,這樣就相當于xhr.send('age=10');
data: { // post 參數(shù)
age: 10
},
1、傳遞的數(shù)據(jù)可以是key=val&key=val形式,這種形式叫formData
2、Content-Type 設成 application/x-www-form-urlencoded
3、當請求數(shù)據(jù)類型不一樣,后端在接收的時采取方法也不一樣
4、假如上述方式以PHP為例可以使用$_POST接收
5、application/json;charset=UTF-8就是json對象形式傳
6、假如采用上述方式,以PHP為例$_POST就不能接收了