我需要在控制器之间共享数据。我的数据实际上是一个数组。我能够成功共享数据,但还有其他要求。我需要从控制器之一清除此数组。我在我的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/

10-11 12:11