这是我的temp.js
angular.module('temp', [])
.service('tempFactory', function() {
this.a =10;
});
这是我的temp.Spec.js
describe('temp', function() {
var tempFactory;
beforeEach(function() {
var mockedTempFactory = {};
module('temp', function($provide) {
$provide.value('tempFactory', mockedTempFactory);
});
mockedTempFactory.a = 20;
inject(function(_tempFactory_) {
tempFactory = _tempFactory_;
});
});
it('console.log of a property', function() {
console.log(tempFactory.a);
});
});
在控制台中我得到20的值。
但如果我像这样定义tempFactory:
angular.module('temp', [])
.constant('tempFactory', {
a: 10;
});
在控制台中,我得到10的值。
为什么我不能重新定义最初定义为常量的tempFactory,但可以重新定义最初定义为服务,值或工厂的tempFactory?
答案 0 :(得分:0)
因为当您创建服务时,您需要为其提供构造函数
.service('tempFactory', function() {
this.a = 10;
})
Angular然后创建一个这样的函数实例:
var tempFactoryInstance = new tempFactory();
return tempFactoryInstance;
并完全返回该实例,因此您可以立即访问a
属性。
但常数没有做任何事情,它只是回归你传递给它的东西,所以
.constant('tempFactory', function() {
this.a = 10;
})
只会将功能返回给您。如果您希望在这种情况下能够访问属性a
,那么您必须"实例化"它:
var instance = new tempFactory();
console.log(instance.a); // 10
请参阅plunker。
您可以详细了解不同提供商in the documentation的行为。