Angularjs服务是单例吗? [英] Are Angularjs services singleton?
问题描述
在参考中,我读到:
最后,重要的是要意识到所有Angular服务都是 应用单例.这意味着只有一个实例 每个喷油器有特定的服务.
Lastly, it is important to realize that all Angular services are application singletons. This means that there is only one instance of a given service per injector.
但是用这个简单的代码似乎不是单例
but with this simple code seems not to be a singleton
'use strict';
angular.module('animal', [])
.factory('Animal',function(){
return function(vocalization){
return {
vocalization:vocalization,
vocalize : function () {
console.log('vocalize: ' + this.vocalization);
}
}
}
});
angular.module('app', ['animal'])
.factory('Dog', function (Animal) {
return Animal('bark bark!');
})
.factory('Cat', function (Animal) {
return Animal('meeeooooow');
})
.controller('MainCtrl',function($scope,Cat,Dog){
$scope.cat = Cat;
$scope.dog = Dog;
console.log($scope.cat);
console.log($scope.dog);
//$scope.cat = Cat;
});
我有点困惑,你能解释一下这是怎么回事吗?
I'm a little confused can you explain me what's the matter ?
更新1 可能我不是棚子里最犀利的工具 但在@Khanh回复后会更好 参考资料中的解释不是很清楚.
UPDATE 1 May be I'm not the sharpest tool in the shed but afer the @Khanh TO reply it would be a better explanation in the reference it's not very clear.
更新2
'use strict';
angular.module('animal', [])
.factory('Animal',function(){
return {
vocalization:'',
vocalize : function () {
console.log('vocalize: ' + this.vocalization);
}
}
});
angular.module('dog', ['animal'])
.factory('Dog', function (Animal) {
Animal.vocalization = 'bark bark!';
Animal.color = 'red';
return Animal;
});
angular.module('cat', ['animal'])
.factory('Cat', function (Animal) {
Animal.vocalization = 'meowwww';
Animal.color = 'white';
return Animal;
});
angular.module('app', ['dog','cat'])
.controller('MainCtrl',function($scope,Cat,Dog){
$scope.cat = Cat;
$scope.dog = Dog;
console.log($scope.cat);
console.log($scope.dog);
//$scope.cat = Cat;
});
BOOM,这是一个单身人士!
BOOM it's a singleton !
更新3
但是,如果您喜欢
'use strict';
angular.module('animal', [])
.factory('Animal',function(){
return function(vocalization){
return {
vocalization:vocalization,
vocalize : function () {
console.log('vocalize: ' + this.vocalization);
}
}
}
});
angular.module('app', ['animal'])
.factory('Dog', function (Animal) {
function ngDog(){
this.prop = 'my prop 1';
this.myMethod = function(){
console.log('test 1');
}
}
return angular.extend(Animal('bark bark!'), new ngDog());
})
.factory('Cat', function (Animal) {
function ngCat(){
this.prop = 'my prop 2';
this.myMethod = function(){
console.log('test 2');
}
}
return angular.extend(Animal('meooow'), new ngCat());
})
.controller('MainCtrl',function($scope,Cat,Dog){
$scope.cat = Cat;
$scope.dog = Dog;
console.log($scope.cat);
console.log($scope.dog);
//$scope.cat = Cat;
});
有效
推荐答案
这是单例,只有一个对象,但是被注入到许多地方. (对象通过引用传递给方法)
It's singleton, there is only one object, but is injected into many places. (objects are passed by reference to a method)
您所有的Animal
都是指向同一动物对象的对象指针,在您的情况下,该动物对象是函数.
您的Cat
和Dog
是通过此函数构造的对象.
All your Animal
are object pointers referring to the same animal object which is a function in your case.
Your Cat
and Dog
are objects constructed by this function.
这篇关于Angularjs服务是单例吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!