我發現,當我在控制器中調用一個服務方法並將一個對象作爲參數傳遞給它時,對該對象所做的任何更改(內部服務方法)也會對原始對象來自我的控制器。AngularJS - 服務更改控制器數據
我一直認爲控制器數據應該保持不變,直到我在承諾贏/錯誤事件中更改它,並且僅在需要時。
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