我不知道什麼是最佳實踐和我應該使用什麼。當創建服務方法module.service和module.factory之間有什麼區別
以下兩種方法有什麼區別?
module.service(..);
和
module.factory(..);
我不知道什麼是最佳實踐和我應該使用什麼。當創建服務方法module.service和module.factory之間有什麼區別
以下兩種方法有什麼區別?
module.service(..);
和
module.factory(..);
有一個關於這個偉大的谷歌組後從帕維爾·科茲洛夫斯基:
https://groups.google.com/forum/#!msg/angular/hVrkvaHGOfc/idEaEctreMYJ
從鮑威爾引:
其實$ provide.provider, $ provide.factory和$ provide.service是 或多或少都是相同的東西,因爲它們都是 創建對象實例的藍圖/指令(那些 實例隨即準備注入協作者)。
$ provide.provider是註冊 藍圖最複雜的方法,它允許您擁有複雜的創建功能和 配置選項。
$ provide.factory是$ provide.provider的簡化版本,當您的 不需要支持配置選項,但仍然希望具有更復雜的創建邏輯時 。
$ provide.service適用於整個創建邏輯將 簡化爲調用構造函數的情況。
所以,這取決於你的建築邏輯的複雜性,你會選擇 $ provide.provider,$ provide.factory和$ provide.service 之一,但你會得到的到底是一個新的實例。
這裏是伴隨小提琴證明(從線程):http://jsfiddle.net/pkozlowski_opensource/PxdSP/14/
,代碼:
var myApp = angular.module('myApp', []);
//service style, probably the simplest one
myApp.service('helloWorldFromService', function() {
this.sayHello = function() {
return "Hello, World!"
};
});
//factory style, more involved but more sophisticated
myApp.factory('helloWorldFromFactory', function() {
return {
sayHello: function() {
return "Hello, World!"
}
};
});
//provider style, full blown, configurable version
myApp.provider('helloWorld', function() {
this.name = 'Default';
this.$get = function() {
var name = this.name;
return {
sayHello: function() {
return "Hello, " + name + "!"
}
}
};
this.setName = function(name) {
this.name = name;
};
});
//hey, we can configure a provider!
myApp.config(function(helloWorldProvider){
helloWorldProvider.setName('World');
});
function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {
$scope.hellos = [
helloWorld.sayHello(),
helloWorldFromFactory.sayHello(),
helloWorldFromService.sayHello()];
}
考慮以下服務。
angular.module("myModule", [])
.service("thingCountingService", function() {
var thingCount = 0;
this.countThing = function() { thingCount++; }
this.getNumThings = function() { return thingCount; }
});
如果你有一個應用程序,其中各種控制器,意見等,所有想參與的事情之一普通計數,上述服務的工作。
但是如果每個應用都想保留自己的東西,那該怎麼辦?
在這種情況下,單件服務將不起作用,因爲它只能跟蹤所有這些服務。但是,工廠允許您在每次啓動新計數器時創建一項新服務。
angular.module("myModule", [])
.factory("thingCountingServiceFactory", function() {
var thingCount = 0;
this.countThing = function() { thingCount++; }
this.getNumThings = function() { return thingCount; }
});
通過以上的工廠,你可以調用new thingCountingServiceFactory()
在任何時候,得到一個新的thingCountingService
設置爲0
你是什麼意思通過 - 「但是,如果每個應用程序都想保留自己的東西,那該怎麼辦?」我有一個應用程序,也有每個人。 –
的可能重複[Angular.js:服務提供VS VS工廠?(HTTP:// stackoverflow.com/questions/15666048/angular-js-service-vs-provide-vs-factory) –
@MarkRajcok這是但這裏的答案有更好的例子 –