我需要在控制器之间共享数据。我的数据实际上是一个数组。我能够成功共享数据但我还有一个要求。我需要从一个控制器中清除这个数组。我在sharedService中编写了一个函数sharedService.clear()。但这不起作用。我在这里做错了什么?有人可以帮忙。
services.service('sharedProperties', function () {
var sharedService = {};
sharedService.personArray = [];
sharedService.setPersonArray = function(newObj) {
this.personArray.push(newObj);
};
sharedService.getPersonArray = function(){
return this.personArray;
};
sharedService.clear = function(){
this.personArray = [];
};
return sharedService;
});
答案 0 :(得分:4)
看起来您已经按照定义它的方式将工厂与服务混淆了。请尝试使用以下代码:
services.service('shareProperties', function() {
this.personArray = [];
this.clear = function() {
this.personArray = [];
}
});
答案 1 :(得分:3)
根据您的解释,您需要一个跨控制器共享人员的静态服务
services.service('sharedProperties', [function () {
this.personArray = [];
this.setPersonArray = function(newObj) {
this.personArray.push(newObj);
};
this.getPersonArray = function(){
return this.personArray;
};
this.clear = function(){
this.personArray = [];
};
}]);
引用this
服务时,sharedProperties
对象上声明的任何内容都将可用。使用var
声明某些内容会使其成为sharedProperties
范围内的私有内容,并且只能在服务中使用。
getPersonArray
中的将返回对personArray
的引用,我可以更改或修改sharedProperties
的值,并参考personArray
无论如何我想要访问方法很无意义。
因此,您可以改为保护personArray
services.service('sharedProperties', [function () {
// private
var personArray = [];
this.setPersonArray = function(newObj) {
personArray.push(newObj);
return [].concat(personArray);
};
this.getPersonArray = function(){
// will return a copy of the personArray at the time of request
return [].concat(personArray);
};
this.clear = function(){
personArray = [];
return [].concat(personArray);
};
}]);
这样您只能使用自己的方法编辑私有personArray
。但它确实需要您调用getPersonArray()来同步控制器之间的任何更改。
我倾向于使用factories
作为实例对象或构造函数,而不是像对象一样使用静态。