【发布时间】:2014-07-25 11:48:28
【问题描述】:
解决方案:var deferred2 = $q.defer(); 这应该在方法 _getSpecificPerson() 中,因为当我访问其他人时,承诺已经解决。这样我每次都会创建新的延迟对象。
我有一些列表,例如人员列表。如果我访问详细信息页面(不同的视图,不同的控制器),我的网址如下:#/PersonDetails/0c4274ed-ae76-4648-bba4-434a3040b9c5,但是当返回并想查看其他人的详细信息时,我会得到与之前相同的页面我可以看到我已经发送了获取其他人的请求。如果以前填充了一些数据,则角度似乎会忽略新数据。 如果需要,这是相关代码:
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(function(result){ 时,结果被缓存!(但是当我在工厂方法中使用 console.log(data.data) 时,_getSpecific 人返回-迄今为止的数据!
【问题讨论】:
-
你能告诉我们returnedPerson中的数据是什么样的吗?是 JSON 吗?
-
是的,它是 Json...如果我刷新页面,一切都很棒...
-
但是当我访问 personA 并返回人员列表然后访问 personB 时,我发送请求并获得人员 B 的响应,但 $scope.OnePerson dors 没有在模板中更新。我试过做 $scope.apply 但我没有帮助。
标签: javascript angularjs