我不知道什么是最佳做法,应该使用什么。
以下两种方法有什么区别?
module.service(..);
和
module.factory(..);
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之一,但最终您将获得一个新实例。
实际上,$ 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()]; }