2014-12-31 9 views
0

Я пытаюсь сделать угловую службу, которая возвращает новый объект.Функция Javascript, которая создает объект, который вызывает функцию.

Это прекрасно и хорошо работает. new MakeRoll() создает экземпляр. Но self.add, в конце также вызывает new MakeRoll(), и это не создает экземпляр, когда я вызываю add, как мне кажется.

Я, вероятно, все это делаю неправильно, но я не смог понять это.

var services = angular.module('services', []); 

services.factory('Roll', [function() { 
    var MakeRoll = function() { 
    var self = {}; 
    self.rolls = []; 
    self.add = function(number, sizeOfDice, add) { 
     var newRoll = {}; 
     newRoll.number = number || 1; 
     newRoll.sizeOfDice = sizeOfDice || 6; 
     newRoll.add = add || 0; 
     newRoll.rollDice = function() { 
     var result = 0; 
     var results=[]; 
     for (var i = 0; i < newRoll.number; i++) { 
      var roll = Math.floor(Math.random() * newRoll.sizeOfDice) + 1; 
      result += roll; 
      results.push(roll); 
     } 
     newRoll.results = results; 
     newRoll.result = result; 
     newRoll.Roll = new MakeRoll(); 
     }; 
     self.rolls.push(newRoll); 
     return self; 
    }; 
    self.remove = function(index) { 
     self.rolls.splice(index, 1); 
    }; 
    self.get = function(index) { 
     return self.rolls[index]; 
    }; 
    return self; 
    }; 
    return new MakeRoll(); 
} 
]); 
+0

В этом случае вам нужно будет запросить сервис для нового экземпляра MakeRoll, так как ваш контекст будет местом, где вы выполняете метод .add(), а не службу. Вы можете реорганизовать свою службу на шаблон, похожий на этот вопрос/ответ: http://stackoverflow.com/q/16838581/1861459 – pherris

+0

Я не верю, что могу попросить сервис для нового экземпляра MakeRoll, поскольку он всегда дает мне синглтон. Я также не уверен, как сделать сервис с зависимостью от самого себя. – lsiebert

ответ

0

Угловое обслуживание спроектировано как одноточечная, чтобы выполнить некоторую бизнес-логику, поэтому не смешивайте обычную модель с угловым сервисом. если вы хотите иметь больше объектов, просто создайте конструктор и свяжите его с сервисом, над которым будет работать.

function MakeRoll() { 
... 
} 

angular.module('service', []).factory('Roll', function() { 
    var rolls = []; 

    return { 
     add: add, 
     remove: remove, 
     get: get 
    } 

    function add() { 
     // var o = new MakrRoll(); 
     // rolls.push(o); 
    } 

    function remove(o) { 
     // remove o from rolls 
    } 

    function get(o) { 
     // get o from rolls 
    } 
}); 
Смежные вопросы