我不知道什么是最佳做法以及我应该使用什么.
以下两种方法有什么区别?
module.service(..);
Run Code Online (Sandbox Code Playgroud)
和
module.factory(..);
Run Code Online (Sandbox Code Playgroud)
luc*_*uma 47
Pawel Kozlowski有一篇很棒的google小组帖子:
https://groups.google.com/forum/#!msg/angular/hVrkvaHGOfc/idEaEctreMYJ
引自Powel的话:
事实上,$ 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()];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19835 次 |
最近记录: |