2017-02-18 3 views
1

У меня есть личные значения в моем сервисе Factory, но когда я обновляю личное значение в одном экземпляре, все экземпляры также обновляются.Частные значения на Angular Factory

Что лучший способ добиться этого без обновления всех экземпляров:


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

Услуга - одноэлементный. Таким образом, существует уникальный экземпляр _valid. _valid должно быть поле пункта:

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 } 
+0

Спасибо !! Я узнал об этом. Im, идущий со вторым подходом, объект может стать очень сложным на пути, и частные методы будут важны. Не совсем уверен, почему Angular выбирает этот aproach для обслуживания singleton, когда вы можете использовать .prototype для совместного использования общих методов. Спасибо JB. –

Смежные вопросы