我需要在控制器之间共享数据。我的数据实际上是一个数组。我能够成功共享数据,但还有其他要求。我需要从控制器之一清除此数组。我在我的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;
});
最佳答案
根据您的解释,您需要一个静态服务,以便跨控制器共享人员
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
用于实例对象或构造函数,而不是像静态对象那样使用。关于angularjs - 在 Controller 之间共享数据[数组],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21616392/