解决方案:var deferred2 = $q.defer();
这应该在方法_getSpecificPerson()内部,因为当我访问alredy中的其他Person promise时解决了。这样我每次都会创建新的延迟对象。
我有一些列表,例如人员列表。如果我访问详细信息页面(不同的视图,不同的控制器)我有像:#/ PersonDetails / 0c4274ed-ae76-4648-bba4-434a3040b9c5,但当一个返回,并希望看到一些其他人的详细信息,我得到像althougt之前相同的页面我可以看到我已经发送了获取其他人的请求。如果之前填充了一些数据,则angular似乎忽略了新数据。 如果需要,这是相关代码:
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
}
}); 我尝试将我的范围分配放在$ scope内。$ apply()但我得到$ digest已在进行中: $ digest已在进行中 编辑:工厂函数从服务返回好的数据,但当我做myPromise.then(函数(结果){在我的控制器结果内部被缓存!(但当我在工厂方法中的console.log(data.data)它_getSpecific人返回迄今为止的数据!
答案 0 :(得分:0)
我应该能写的所有JSON都是
$scope.OnePerson = returnedPerson.AllXml;
您也可以简化服务
var _getSpecificPerson = function (id) {
var dataString = { id:id };
return $http.post(ROOT + 'Home/GetPerson', dataString);
}
因为post方法返回一个promise。 在您的控制器中,您必须进行此更改才能使其正常工作:
var returnedPerson = result.data;