Angular Factory的私有价值观

时间:2017-02-18 19:41:11

标签: angularjs

我的工厂服务上有私有值,但是当我在一个实例中更新私有值时,所有实例也会更新。

在没有更新所有实例的情况下,最好的方法是什么:

angular.module('app').factory('instanceItem', function () {
  var _valid = true;
  var item = function (id,data){
    this.id = id;
    this.data = data;
  };
  item.prototype.setValid = function(bool) {
    _valid = bool;
  }
  item.prototype.getValid = function() {
    return _valid
  }
  return { item:item }
});

我得到的是什么:

var itemA = new instanceItem.item(1,{});
var itemB = new instanceItem.item(2,{});
itemA.setValid(false);
console.log(itemA.getValid());
//False
console.log(itemB.getValid());
//False

我在寻找什么

var itemA = new instanceItem.item(1,{});
var itemB = new instanceItem.item(2,{});
itemA.setValid(false);
console.log(itemA.getValid());
//False
console.log(itemB.getValid());
//True

1 个答案:

答案 0 :(得分:1)

服务是单身人士。所以有一个独特的_valid实例。 _valid应该是item的字段:

var item = function (id,data){
    this.id = id;
    this.data = data;
    this._valid = true;
  };
  item.prototype.setValid = function(bool) {
    this._valid = bool;
  }
  item.prototype.getValid = function() {
    return this._valid;
  }

或者,如果你真的想让它变得私密(并且使你的服务更自然地使用):

  function createItem(id, data) {
    var _valid = true;

    return {
      id: id,
      data: data,
      setValid: function(bool) {
        _valid = bool;
      },
      getValid: function() {
        return _valid;
      }
    };
  }
  return { createItem: createItem }