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();
});