据我了解,当在工厂内部时,我返回一个被注入控制器的对象。当在服务内部时,我正在使用以下方法处理对象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
in ACtrl
事实证明user.first
in BCtrl
也改变了,例如User
是单例吗?
我的假设是一个新实例被注入到带有工厂的控制器中?
所有角度服务都是单例:
文档(参见作为单例的服务): https://docs.angularjs.org/guide/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/#/ http://slides.wesalvaro.com/20121113/#/
这些幻灯片在一场 AngularJs 聚会中使用:http://blog.angularjs.org/2012/11/more-angularjs-meetup-videos.html http://blog.angularjs.org/2012/11/more-angularjs-meetup-videos.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)