SOLUTION: var deferred2 = $q.defer(); This should be inside method _getSpecificPerson() because when I visit other Person promise in alredy resolved. This way I create new deferred object each time.
I have some list, for example list of persons. If I visit details page( different view ,different controller) I have url like : #/PersonDetails/0c4274ed-ae76-4648-bba4-434a3040b9c5, but when a return and want to see some other person details I get same page like before althougt I can see I sent already get request for getting other person. It seems angular ignores new data, if it has some data populated before. This is relevant code if needed:
personModule.controller("PersonDetailsController", function ($scope, $http, dataService, $routeParams) {
var id = $routeParams.PersonId;
var myPromise = dataService.getSpecificPerson(id);
myPromise.then(function (result) {
var returnedPerson = result;
if (returnedPerson.AllXml) {
$scope.OnePerson = JSON.parse(returnedPerson.AllXml);
}
});
});
personModule.factory('dataService', function ($http,$q) {
var deferred = $q.defer();
var deferred2 = $q.defer();
var _getPersons= function() {
$http.post(ROOT + 'Home/GetPersons').
then(function(data, status, headers, config) {
deferred.resolve(data.data);
},function () {
deferred.reject();
});
return deferred.promise;
}
var _getSpecificPerson = function (id) {
var dataString = {
id:id
}
$http.post(ROOT + 'Home/GetPerson', dataString).
then(function (data, status, headers, config) {
deferred2.resolve(data.data);
}, function () {
deferred2.reject();
});
return deferred2.promise;
}
return {
getPersons: _getPersons,
getSpecificPerson:_getSpecificPerson
}
}); I tryed put my scope assigment inside of $scope.$apply() but I get $digest already in progress: $digest already in progress EDIT: Factory function returns good data from service but when I do myPromise.then(function(result){ inside of my controller result is cached! (but when I console.log(data.data) inside factory method it _getSpecific person returns up-to-date data!