使用 $q.all 有时会导致选择无法正确读取模型
Using $q.all sometimes causes selects to not read the model correctly
我注意到我的 select 下拉列表中的一个有时不会包含 select 从 Angular 模型编辑的正确项目。我追踪到它似乎是在 Angular 加载表单之前未履行承诺的问题。在尝试了大量不同的方法之后,我最终决定做这个无意义的事情来让它起作用:
$q.all([
$scope.categories.$promise,
$scope.durations.$promise,
$scope.job.$promise,
$scope.jobStatuses.$promise,
$scope.recruiters.$promise,
$scope.states.$promise
]).then(function () {
window.setTimeout(function() {
$scope.editJob = {
acceptsVisas: $scope.job.acceptsVisas,
categoryId: $scope.job.categoryID,
city: $scope.job.city,
contact: $scope.job.contactID,
description: $scope.job.details,
duration: $scope.job.durationID,
internalId: $scope.job.internalReqID,
postal: $scope.job.postal,
recruiter: $scope.job.recruiterID,
state: $scope.job.stateID,
status: $scope.job.jobStatusID,
title: $scope.job.title
}
}, 10);
});
如果没有 setTimeout,select 偶尔不会被错误的招聘人员 selected。我已经将它调试到 Angular/JS 里面的东西。检查模型表明正确的字段是事先设置的,并且它不能可靠地重现,这使我假设 Angular 在承诺完成之前加载表单,然后 selecting正确的招聘人员在加载招聘人员数据时。没有任何内容脱离上下文,除了对资源的 运行 查询之外,这几乎是所有代码。我还更新了 windows.setTimeout
以使用 $timeout
,但首先需要这样做的要点仍然存在。
一年过去了,我没有找到答案。对于我从那时起所做的所有搜索,似乎简单的答案是它是 Angular 中的一个缺陷,而且真的没什么可做的。超时解决方案有效,只是不需要它。不幸的是,那是 third-party 软件的 side-effect。
我注意到我的 select 下拉列表中的一个有时不会包含 select 从 Angular 模型编辑的正确项目。我追踪到它似乎是在 Angular 加载表单之前未履行承诺的问题。在尝试了大量不同的方法之后,我最终决定做这个无意义的事情来让它起作用:
$q.all([
$scope.categories.$promise,
$scope.durations.$promise,
$scope.job.$promise,
$scope.jobStatuses.$promise,
$scope.recruiters.$promise,
$scope.states.$promise
]).then(function () {
window.setTimeout(function() {
$scope.editJob = {
acceptsVisas: $scope.job.acceptsVisas,
categoryId: $scope.job.categoryID,
city: $scope.job.city,
contact: $scope.job.contactID,
description: $scope.job.details,
duration: $scope.job.durationID,
internalId: $scope.job.internalReqID,
postal: $scope.job.postal,
recruiter: $scope.job.recruiterID,
state: $scope.job.stateID,
status: $scope.job.jobStatusID,
title: $scope.job.title
}
}, 10);
});
如果没有 setTimeout,select 偶尔不会被错误的招聘人员 selected。我已经将它调试到 Angular/JS 里面的东西。检查模型表明正确的字段是事先设置的,并且它不能可靠地重现,这使我假设 Angular 在承诺完成之前加载表单,然后 selecting正确的招聘人员在加载招聘人员数据时。没有任何内容脱离上下文,除了对资源的 运行 查询之外,这几乎是所有代码。我还更新了 windows.setTimeout
以使用 $timeout
,但首先需要这样做的要点仍然存在。
一年过去了,我没有找到答案。对于我从那时起所做的所有搜索,似乎简单的答案是它是 Angular 中的一个缺陷,而且真的没什么可做的。超时解决方案有效,只是不需要它。不幸的是,那是 third-party 软件的 side-effect。