Angular.js 中是否有任何事件 "on $scope digest finished" 或 "on view refreshed"?
Is any event "on $scope digest finished" or "on view refreshed" in Angular.js?
我正在执行一个 AJAX 请求,以获取视图中用于生成列表的数据。我需要知道何时更新 $scope 以及何时在收到成功响应后呈现视图,以便我可以为列表动态设置一些初始值和一些事件处理程序。
我目前使用的是以下代码,但它并没有起到作用:
responsePromise.success(function (data, status, headers, config) {
var slideInfos = data;
$scope.slideInfos = slideInfos;
setInitialSliderValues();
});
当我调用 setInitialSliderValues() 时,视图仍然没有刷新。
当我尝试使用以下内容时,出现错误“$digest already in progress”:
responsePromise.success(function (data, status, headers, config) {
var slideInfos = data;
$scope.$apply(function () {
$scope.slideInfos = slideInfos ;
setInitialSliderValues();
}
});
如果不使用计时器来检查我预期的更改,我如何才能绝对确定对数据的更改已在页面上生效。
您可以尝试使用 $evalAsync:
responsePromise.success(function (data, status, headers, config) {
$scope.slideInfos = data;
$scope.$evalAsync(function () {
setInitialSliderValues();
}
});
与 $timeout 不同,如果可能,它将尝试在同一摘要周期内触发,否则将在下一个摘要周期中解决。
使用 $timeout()
将在下一个摘要周期中得到 运行。不要忘记添加 $timeout
对控制器的依赖。
$timeout(function () {
$scope.slideInfos = slideInfos ;
setInitialSliderValues();
});
我正在执行一个 AJAX 请求,以获取视图中用于生成列表的数据。我需要知道何时更新 $scope 以及何时在收到成功响应后呈现视图,以便我可以为列表动态设置一些初始值和一些事件处理程序。
我目前使用的是以下代码,但它并没有起到作用:
responsePromise.success(function (data, status, headers, config) {
var slideInfos = data;
$scope.slideInfos = slideInfos;
setInitialSliderValues();
});
当我调用 setInitialSliderValues() 时,视图仍然没有刷新。
当我尝试使用以下内容时,出现错误“$digest already in progress”:
responsePromise.success(function (data, status, headers, config) {
var slideInfos = data;
$scope.$apply(function () {
$scope.slideInfos = slideInfos ;
setInitialSliderValues();
}
});
如果不使用计时器来检查我预期的更改,我如何才能绝对确定对数据的更改已在页面上生效。
您可以尝试使用 $evalAsync:
responsePromise.success(function (data, status, headers, config) {
$scope.slideInfos = data;
$scope.$evalAsync(function () {
setInitialSliderValues();
}
});
与 $timeout 不同,如果可能,它将尝试在同一摘要周期内触发,否则将在下一个摘要周期中解决。
使用 $timeout()
将在下一个摘要周期中得到 运行。不要忘记添加 $timeout
对控制器的依赖。
$timeout(function () {
$scope.slideInfos = slideInfos ;
setInitialSliderValues();
});