据我了解,当在工厂内部时,我返回一个注入到控制器中的对象。在服务内部时,我使用this而不是返回任何东西来处理对象。
this
我当时以为服务 始终是单例 ,并且每个控制器都注入了一个 新的工厂对象 。但是,事实证明,工厂对象也是单例对象吗?
示例代码演示:
var factories = angular.module('app.factories', []); var app = angular.module('app', ['ngResource', 'app.factories']); factories.factory('User', function () { return { first: 'John', last: 'Doe' }; }); app.controller('ACtrl', function($scope, User) { $scope.user = User; }); app.controller('BCtrl', function($scope, User) { $scope.user = User; });
当改变user.first的ACtrl事实证明,user.first在BCtrl也发生了变化,比如User是一个单身?
user.first
ACtrl
BCtrl
User
我的假设是在工厂的控制器中注入了新实例?
所有角度服务都是单例 :
Docs(请参阅 Services作为单例 ):https : //docs.angularjs.org/guide/services
最后,重要的是要意识到所有Angular服务都是应用程序单例。这意味着每个喷油器只有一种给定服务的实例。
基本上,服务和工厂之间的区别如下:
app.service('myService', function() { // service is just a constructor function // that will be called with 'new' this.sayHello = function(name) { return "Hi " + name + "!"; }; }); app.factory('myFactory', function() { // factory returns an object // you can run some code before return { sayHello : function(name) { return "Hi " + name + "!"; } } });
查看有关$ provide的此演示文稿:http : //slides.wesalvaro.com/20121113/#/
这些幻灯片用于AngularJs聚会之一:http : //blog.angularjs.org/2012/11/more-angularjs-meetup- videos.html