在参考资料中,我读到:
最后,重要的是要意识到所有Angular服务都是应用程序单例。这意味着每个喷油器只有一种给定服务的实例。
但是用这个简单的代码似乎不是一个单例
'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;
});
我有点困惑,你能解释一下我怎么了吗?
更新1 可能不是我不是棚里最犀利的工具,但是在@Khanh TO答复之后,这在参考文献中会是一个更好的解释,尚不十分清楚。
更新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,这是一个单身人士!
更新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;
});
有用
它是单例,只有一个对象,但是被注入到许多地方。(对象通过引用传递给方法)
您所有的Animal
对象都是指向 同一动物对象的 对象指针,在您的情况下,这是一个 函数
。您Cat
和Dog
是由此函数构造的对象。
本文向大家介绍AngularJS 单元测试服务,包括了AngularJS 单元测试服务的使用技巧和注意事项,需要的朋友参考一下 示例 服务编号 考试 跑!
问题内容: 我已经使用CacheFactory创建了服务。我原以为是单身。我将其注入控制器中,并且在控制器范围内可以正常工作。但是,一旦我进入了具有不同范围的另一个页面,似乎就没有在不同范围中存储在同一控制器中的缓存中的值。CacheFactory的行为不应该是一个单例,在我注入CacheService的任何地方都具有那些相同的缓存对象吗? 这是我的服务示例: 然后在我的控制器中: 问题答案: 实
问题内容: AngularJS在其文档中明确指出“服务是单例”: 违反直觉,也返回一个Singleton实例。 鉴于非单例服务有很多用例,实现工厂方法以返回Service实例的最佳方法是什么,以便每次声明依赖项时,它的另一个实例都可以满足? 问题答案: 我认为我们不应该让工厂返回一个有能力的函数,因为这会开始破坏依赖注入,并且该库的行为会很尴尬,尤其是对于第三方。简而言之,我不确定非单项服务是否有
因此,活动将运行并停止服务,该服务将运行并停止服务。 我的问题是创建了的多个实例,该活动还创建了的多个实例。 因此,我希望将这两个作为运行,但我不确定如何这样做。 如果有必要,我可以发布一些我所拥有的示例代码,但我真正寻找的是一个操作方法。
服务是一种由服务器端带到客户端的特性,它由来已久。AngularJS应用中的服务是一些用依赖注入捆绑在一起的可替换的对象。服务是最常和依赖注入一起用的,它也是AngularJS中的关键特性。
问题内容: 我正在测试服务A,但是服务A取决于服务B(即服务B已注入服务A)。 我已经看到了这个问题,但是我的情况有所不同,因为我认为_模拟_ 服务B而不是注入服务B的实际实例更有意义。我将用茉莉间谍对其进行模拟。 这是一个示例测试: 我得到的错误是: 错误:未知提供程序:serviceBProvider 我该怎么做? 问题答案: 实际上,在AngularJS中,依赖注入使用“最后获胜”规则。因此