AngularJS的service層用於處理業務邏輯和資料持久化,以下3鍾方法可以建立並註冊我們自己的service,在控制器中注入已建立的service服務,就可以呼叫service裡面的屬性和方法了。
1、Factory
2、Service
3、Provider
1、最簡單的方式:Factory工廠方法
Angular裡建立service最簡單的方式就是使用factory()方法,使用factory()來建立服務的時候,首先建立一個物件,然後在這個物件上新增屬性,最後返回這個物件。把這個服務注入控制器中,控制器就可以訪問物件上的方法了。
[javascript] view plain copy
angular.module('yeomanAngularApp')
.factory('playerFactory',function(){
var _players = [
{"username":"zhangsan",'address':'北京'},
{"username":"lisi",'address':'上海'},
{"username":"wangwu",'address':'大連'}
];
var service = {};
service.getPlayers = function(){
return _players;
}
return service;
});
[javascript] view plain copy
angular.module('yeomanAngularApp')
.controller('PlayerCtrl', function ($scope,$http,$filter,playerFactory) {
$scope.playName = $filter('lowercase')('Angular');
$scope.players = playerService.getPlayers();
console.log(players);
})
2、最直接的方式:Service建構函式方法
service()與factory用法差不多,區別在於不需要返回一個物件。
使用service()建立服務時,相當於使用new關鍵字進行了例項化,只需要在this上新增屬性和方法,然後服務會自動返回this。把這個服務注入控制器中,控制器就可以訪問物件上的屬性方法了。
[javascript] view plain copy
angular.module('yeomanAngularApp')
.service('playerService', function(){
this.getRemotePlayers = function(){
var deferred = $q.defer();
$http({
method: 'JSONP',
url: 'url'+'&callback=JSON_CALLBACK'
}).success(function(data, status) {
deferred.resove(data);
}).error(function(data, status) {
deferred.reject('error');
});
return deferred.promise;
}
})
[javascript] view plain copy
angular.module('yeomanAngularApp')
.controller('PlayerCtrl', function ($scope,$http,$filter,playerService) {
$scope.players = playerService.getRemotePlayers();
console.log(players);
})
3、最通用的方式:Provider方法
provider是唯一一種可以建立用來注入到config()函式的服務的方式。如果要在service物件啟動之前先進行模組範圍的配置,應使用Provider。
[javascript] view plain copy
angular.module('yeomanAngularApp')
.provider('playerProvider',function(){
this._players = [
{"username":"zhangsan",'address':'北京'},
{"username":"lisi",'address':'上海'},
{"username":"wangwu",'address':'大連'}
];
this.paramFromConfig = '';
this.$get = function(){
var that = this;
return{
getPlayers: function(){
return that._players;
},
paramOnConfig: that.paramFromConfig
}
}
})
.config(function(playerProviderProvider){
playerProviderProvider.paramFromConfig = 'param from config';
})
[javascript] view plain copy
angular.module('yeomanAngularApp')
.controller('PlayerCtrl', function ($scope,$http,$filter,playerProvider) {
$scope.playName = $filter('lowercase')('Angular');
$scope.players = playerService.getPlayers();
console.log(players);
})
在此我向大家推薦一個架構學習交流群。交流學習群號: 744642380, 裡面會分享一些資深架構師錄製的視訊錄影:有Spring,MyBatis,Netty原始碼分析,高併發、高效能、分散式、微服務架構的原理,JVM效能優化、分散式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良