在Angular.js中是否有任何事件"on $scope digest finished"或"on view refreshed"?



我正在对视图中用于生成列表的数据进行AJAX请求。我需要知道$scope何时更新,以及在成功收到响应后视图何时呈现,这样我就可以为列表动态设置一些初始值和一些事件处理程序。

我目前正在使用以下代码,但没有做到这一点:

responsePromise.success(function (data, status, headers, config) {
    var slideInfos = data;
    $scope.slideInfos = slideInfos;
    setInitialSliderValues();
});

当我调用setInitialSliderValues()时,视图仍然没有刷新。

当我尝试使用以下内容时,我会收到一个错误"$digest ready in progress":

responsePromise.success(function (data, status, headers, config) {
    var slideInfos = data;
    $scope.$apply(function () {
        $scope.slideInfos = slideInfos ;
        setInitialSliderValues();
    }
});

如果不使用计时器来检查我期望的更改,我如何才能绝对确定对数据的更改已在页面上生效。

使用将在下一个摘要周期中运行的$timeout()。不要忘记在控制器上添加$timeout依赖项。

$timeout(function () {
    $scope.slideInfos = slideInfos ;
    setInitialSliderValues();
});

您可以尝试使用$evalAsync:

responsePromise.success(function (data, status, headers, config) {
    $scope.slideInfos = data;
    $scope.$evalAsync(function () {        
        setInitialSliderValues();
    }
});

与$timeout不同,如果可能,它将尝试在同一个摘要周期内激发,否则将在下一个摘要循环中解析。

最新更新