2015-03-07 3 views
1

первый - я довольно новыми для AngularJS ...AngularJS завод класс с несколькими экземплярами new'ed

Я сделал класс фабрики, что я хочу сделать несколько экземпляров, но дело в том, что, когда a создайте новый экземпляр моего класса «Case», меняются другие экземпляры. Я уверен, что это довольно просто, но не могу понять.

Я думаю, что я был умным, чтобы сделать простой (общий) класс

мой завод класс:

.factory('Case', function($q, $http) { 
    var optionsProto = { 
    id : null, 
    reference : "", 
    fields : [] 
    } 

    var self = this; 

    return function Case(options) { 
    angular.extend(self, optionsProto, options); 
    return self; 

    // Updates via. webservice, if posible 
    this.update = function get(options) { 
     // not implemented yet 
     return self; 
    }; 

    // Saves via. webservice, if posible 
    this.save = function save() { 
     // not implemented yet 
     return self; 
    }; 
    } 
}) 

мой контроллер:

.controller('CasesCtrl', function($scope, Case) { 

    $scope.cases = [ 
    new Case({"id": 1}), 
    new Case({"id": 2}), 
    new Case({"id": 3}), 
    ]; 

    console.log($scope.cases); 

}) 

консольный выход (как) ::

Object {id: 3} 
Object {id: 3} 
Object {id: 3} 

ответ

3

Вы ar e ссылаясь на неправильный this. Попробуйте:

.factory('Case', function($q, $http) { 
    var optionsProto = { 
    id : null, 
    reference : "", 
    fields : [] 
    }; 

    return function Case(options) { 
    angular.extend(this, optionsProto, options); 

    // Updates via. webservice, if posible 
    this.update = function get(options) { 
     // not implemented yet 
     return this; 
    }; 

    // Saves via. webservice, if posible 
    this.save = function save() { 
     // not implemented yet 
     return this; 
    }; 
    } 
}); 

Если вы хотите сохранить переменную self (так что все функции связаны с объектом Case), сделайте следующее:

return function Case(options) { 
    var self = this; 
    angular.extend(self, optionsProto, options); 

    // Updates via. webservice, if posible 
    this.update = function get(options) { 
     // not implemented yet 
     return self; 
    }; 

    // Saves via. webservice, if posible 
    this.save = function save() { 
     // not implemented yet 
     return self; 
    }; 
    } 

также: Обратите внимание, что я удалил return self; линию. Это связано с тем, что операторы new всегда возвращают созданный объект и прерывают остальную часть функции.

+0

Haha .. perfect - Только то, что мне нужно;) .. Спасибо! – pkdkk

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