В основном проблема заключается в том, что переменные области видимости objectiveData
& doneData
$ содержат одно и то же место в памяти.Таким образом, изменение любого значения приведет к изменениям во всех трех значениях success
, objectiveData
и doneData
.
Таким образом, вы должны убедиться, что при назначении одной переменной с несколькими значениями создайтеклон этой переменной success
и сохраните, а затем присвойте эту переменную требуемой переменной.
В angularjs существует метод angular.copy
, который поможет вам создать клон объекта с новой ячейкой памяти.Это гарантирует, что новая переменная будет указывать на другое место в памяти.
Контроллер:
$scope.objectiveData = angular.copy(success);
$scope.doneData = angular.copy(success);
Бонус: Очевидно, что у вас неправильная реализация службы, в которой вы создаетеявное обещание - вот причина, по которой вам пришлось звонить $digest
в вашем .then
обратном вызове успеха.Это означает, что вы создаете случаи, когда вам нужно запустить цикл дайджеста вручную, так как код будет выполняться вне контекста angularjs.Скорее вы должны вернуть существующее $http
обещание, как показано ниже, и удалить $scope.$digest()
из своего кода, который вообще не нужен.
Служба
myApp.service("lastday_data", function($http) {
this.getData = function() {
return $http({
method: 'GET',
url: 'http://localhost/task/index.php/v1/example/users'
}).then(function(response) {
if (response.status)
return response.data;
else
return $q.reject('Problem retrieving data');
}, function(error) {
return $q.reject(error);
});
}
});