任何事件"在$ scope digest上完成"或者"在视图上刷新"在Angular.js?

时间:2015-02-28 20:59:55

标签: javascript angularjs angularjs-timeout anguarjs-digest-cycle

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

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

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

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

当我尝试使用以下内容时,我收到错误“$ digest已在进行中”:

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

如何在不使用检查我期望的更改的计时器的情况下,确保数据更改已在页面上生效。

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

您可以尝试使用$ evalAsync:

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

与$ timeout不同,如果可能的话,它会尝试在相同的摘要周期内触发,如果不是,它将在下一个摘要周期中解决。