我有一个缓存服务,我想在其中存储数据。
angular.module('core').service('markerCache', function(){
var cache = [];
this.set_cache = function(arr){
cache = arr;
this.cached = true;
};
this.cached = false; //this must be read-only and must be property, not function
});
如果可能的话,我还想在角度服务(工厂,服务)中定义只读(值只能在服务内设置)属性,否则 - 任何解决方法都会很棒。
There is一种在javascript中定义只读属性的方法,但是如何以角度方式进行定义?
通过只读我的意思是在服务内设置值。例如
angular.module('core').controller('Ctrl', function($scope, markerCache){
markerCache.cached = false; //disable setter outside of markerCache service
});
angular.module('core').service('markerCache', function(){
var cache = [];
var cached = false;
Object.defineProperty(this, "cache", {
get: function() {
return cache;
},
set: function(val){
cache = val;
cached = true;
}
});
Object.defineProperty(this, "cached", {
get: function() {
return cached;
},
set: angular.noop
});
});
答案 0 :(得分:4)
您可以使用闭包来隐藏变量并使用Object.defineProperty公开属性来读取变量。
angular.module('core').service('markerCache', function(){
var cache = [];
var cached = false; // private variable
this.set_cache = function(arr){
cache = arr;
cached = true;
};
Object.defineProperty(this, "cached", { // public readonly getter
get: function() {
return cached;
},
set: function(val) {
//throw new Error('Cannot set internal cache state'); //throw custom exception
}
//set: angular.noop //or do nothing, empty setter
})
});
答案 1 :(得分:0)
您在寻找AngularJS constants吗?
常量(名称,值);注册一个常量服务,例如字符串, $ injector,数字,数组,对象或函数。 与值不同,它可以注入模块配置功能 (参见angular.Module)并且它不能被Angular覆盖 装饰器。
答案 2 :(得分:0)
该变量不应与this
上下文相关联,您可以将其变为私有var cached
,并在服务中定义getter
以获取cache
的值这样消费者就可以通过getter
函数访问该值。
angular.module('core').service('markerCache', function(){
var cache = [],
cached = false; //made privet
this.set_cache = function(arr){
cache = arr;
cached = true;
};
this.getCache = function(){
return cached;
}
});