當(dāng)我們創(chuàng)建一個AngularJS服務(wù)時,通??梢杂腥N方式來自定義service。
簡單來說,provider
是被 注入控制器 使用的一個對象,注入機(jī)制通過調(diào)用一個provider
的$get()
方法,把得到的東西作為參數(shù)進(jìn)行相關(guān)調(diào)用。比如把得到的服務(wù)作為一個Controller
的參數(shù)。
看下面的代碼:
// 這是一個provider
var pp = function() {
this.$get = function() {
return {
'name': 'iceiceice',
'getAge': function() {
return 25;
}
};
};
};
// 我在模塊的初始化過程中,定義了一個叫 PP 的服務(wù)
var app = angular.module('Demo', [], function($provide) {
$provide.provider('PP', pp);
});
// PP服務(wù)實際上就是 pp 這個provider的$get()方法返回的東西
app.controller('TestCtrl', function($scope, PP) {
console.log(PP);
});
下面還有兩種定義service 的簡略方法。
第一個是factory
方法,此方法由$provider
提供,module
的factory
是一個引用,作用一樣。這個方法直接把一個函數(shù)當(dāng)成一個對象的$get()
方法,這樣你就不用顯示的定義一個provider
了。示例如下:
var app = angular.module('Demo', [], function() {
// TODO 模塊聲明
});
app.factory('PP', function() {
return {
'name': 'iceiceice'
};
});
app.controller('TestCtrl', function($scope, PP) {
console.log(PP);
});
第二個是service
方法,也是由$provider
提供,module
中有對它的同門引用。
service
和factory
的區(qū)別在于:前者要求提供一個 構(gòu)造方法 ,后者是要求提供 $get()
方法。簡單的是說,就是前者一定是得到一個object
, 后者可以一個數(shù)字或者字符串。示例代碼如下:
var app = angular.module('Demo', [], fyunction() {
// TODO 模塊聲明
});
app.service('PP', function() {
this.name = 'iceiceice';
});
app.controller('TestCtrl', function($scope, PP) {
console.log(PP);
});
完整示例如下,
<html ng-app="app">
<head>
<script src="jquery-2.0.3.js"></script>
<script src="angular.js"></script>
</head>
<body ng-controller="ctrl">
</body>
<script>
var app = angular.module('app', []);
app.factory('PP1', function() {
return {
'name': 'jarred'
};
});
app.service('PP2', function() {
this.name = 'jarred2';
});
app.controller('ctrl', [
'$scope',
'PP1',
'PP2',
function($scope, pp1, pp2) {
console.log(pp1);
console.log(pp2);
}
]);
</script>
</html>
更多建議: