Я обнаружил, что когда я вызываю метод службы внутри своего контроллера и передаю ему объект в качестве параметра, любые изменения, которые выполняются с этим объектом (внутри метода службы), также выполняются в оригинале объект из моего контроллера.AngularJS - данные диспетчера изменений службы
Я всегда думал, что данные контроллера должны оставаться неизменными до тех пор, пока я не изменил его внутри обещания win/error, и только если мне нужно.
JS образец:
// Code goes here
var app = angular.module('App', []);
app.controller('AppCtrl', function($scope, simpleService){
$scope.data = { d: 1, c: 10};
$scope.clickMe = function(){
simpleService.clickMe($scope.data).then(function(res){
alert($scope.data.d);
})
.catch(function(err){
alert($scope.data.d);
});
}
});
app.factory('simpleService', function($q){
var simpleServiceMethods = {};
simpleServiceMethods.clickMe = function(data){
var deffered = $q.defer();
//data = JSON.parse(JSON.stringify(data)); - solution: clone data without references
data.d = 1111;
deffered.reject();
return deffered.promise;
}
return simpleServiceMethods;
});
Plunker демо: http://plnkr.co/edit/nHz2T7D2mJ0zXWjZZKP3?p=preview
Я не уверен, что понимаю эту проблему, знаете ли вы о привязке данных AngularJS? – Sphaso
Проблема в том, что служба меняет данные моего контроллера. Это нормально? – tbutcaru
Это если вы передаете переменную $ scope в службу и затем измените ее. Вот как работает привязка данных AngularJS – Sphaso