我們可以通過
factory
,service
,value
這三種方式來自定義服務。
自定義服務與我們之前學的自定義指令和自定義過濾器是一樣的,都是通過調用不同的方法進行自定義服務的。下面通過factory
來自定義一個格式化字符串的例子,來看一下具體的過程。
-
factory自定義服務
首先先初始化定義一個模塊:
var service = angular.module('service',[]);
接下來通過service
來調用factory
方法實現自定義服務,里面有兩個參數,第一個參數為自定義服務的名稱,第二個參數為一個數組,回掉函數,在這里需要return
一個函數或對象:
service.factory('format',['$filter',function ($filter) {
//自定義服務,單依賴于$filter
//自定義服務的具體功能
return function (arg) {
var str = '';
for(var key in arg){
str += key + '='+arg[key] +'&';
}
str = str.slice(0,-1);
return str;
}
}]);
定義好服務之后就可以在控制器中調用了,調用的方法還是和內置服務一樣,需要參數,只不過自定義的服務在調用的時候不需要加“$”符號:
service.controller('DemoController',['$scope','$http','format',function ($scope,$http,format) {
var data = {
name:"張三",
age:10
};
// 將格式化后的字符串打印出來
console.log(format(data));
}]);
Paste_Image.png
-
service自定義服務
同樣的,在這用一個demo來演示service
自定義的服務,同樣的先定義一個模塊,然后調用service方法,定義好具體功能后,在控制器中調用,下面用service來定義一個格式化時間的服務,里面有兩個參數,第一個參數為自定義服務的名稱,第二個參數為一個數組,回掉函數:
<script>
var App = angular.module('App', []);
// 自定義服務顯示日期
App.service('showTime', ['$filter', function($filter) {
var now = new Date();
var date = $filter('date');
//向對象上添加具體的方法
this.now = date(now, 'y-M-d H:mm:ss');
//向對象上添加具體的方法
this.sayHello = function(){
alert("你好");
}
}]);
App.controller('DemoController', ['$scope', 'showTime', function($scope, showTime) {
$scope.now = showTime.now;
showTime.sayHello();
}])
</script>
Paste_Image.png
Paste_Image.png
這個跟我們之前那就不一樣了,之前要么返回一個函數或者一個對象,我們在使用
factory
的 時候需要顯示的去return一個函數或對象,在service這我們不用返回對象,只要一個this就可以了,我們知道this也是一個對象,我們return回去的也是一個對象,我們需要增加函數功能的時候只需要在后面你添加this.函數名和方法體就可以了,比如上面格式化時間的哪個demo,就有兩個功能:格式化時間和彈出“你好”。
-
value自定義服務
value
來定義服務的時候,特別簡單,沒有factory,service
那么復雜,它只能定義單一的服務,不像factory,service
既可以定義函數又可以定義對象,而value是自定義常量的服務,類似于(key,value)
這種形式,同樣的有兩個參數,第一個服務的名稱,第二個就是所對應的值(只對于value
服務來說)。
service.value("author",'張三');
service.controller('DemoController',['$scope','$http','format','author',function ($scope,$http,format,author) {
$scope.author = author;
}]);
<div ng-controller="DemoController">
<li>{{author}}</li>
</div>
Paste_Image.png
value
本質上是一個服務,但是從表現形式上看是一個常量。