Я пытаюсь сделать угловую службу, которая возвращает новый объект.Функция 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();
}
]);
В этом случае вам нужно будет запросить сервис для нового экземпляра MakeRoll, так как ваш контекст будет местом, где вы выполняете метод .add(), а не службу. Вы можете реорганизовать свою службу на шаблон, похожий на этот вопрос/ответ: http://stackoverflow.com/q/16838581/1861459 – pherris
Я не верю, что могу попросить сервис для нового экземпляра MakeRoll, поскольку он всегда дает мне синглтон. Я также не уверен, как сделать сервис с зависимостью от самого себя. – lsiebert