Here是返回基于$q
的承诺的控制器构造函数的最小示例。承诺确实会被执行,但其结果不会反映在视图中。有没有办法完成承诺触发刷新?
$scope.property = 0;
return $q((resolve, reject) => {
setTimeout(() => {$scope.property = 1; resolve();}, 5000);
});
答案 0 :(得分:1)
看起来$q
在消耗已解决的承诺之前不会触发摘要。这按预期工作
return $q((resolve, reject) => {
setTimeout(() => {$scope.property = 1; resolve();}, 5000);
}).then(angular.noop);
理想情况下,您实际上使用的是解析器,例如
$q(resolver =>
setTimeout(() => resolve(1), 5000)
).then(p => $scope.property = p);
或更简单地说,使用$timeout
服务
$timeout(() => $scope.property = 1, 5000);
或使用$timeout
$timeout(() => 1, 5000).then(p => $scope.property = p)