【问题标题】:Forcing digest in Angular with $timeout使用 $timeout 在 Angular 中强制执行摘要
【发布时间】:2015-11-09 19:54:00
【问题描述】:

在使用 Angular 本身之外的事件时,在 Angular 中强制进行摘要的最佳方法是什么 - 例如,在 jqLit​​e 容器中加载图像时,我发现自己正在这样做:

$img.on('load', function () {
    $timeout(function () { // Force digest
        $scope.isLoaded = true;
    });
});

这是我发现自己经常使用的一种模式。然而,它感觉很脏(就像一个hack-dirty,呃)。但是,使用$apply() 可能会触发"digest already in progress" error。我知道我可以check for $scope.$$phase,但感觉同样肮脏。

那么,什么是正确的方法可以让您尽快对 DOM 进行更改?

【问题讨论】:

  • “我发现自己经常使用”。理想情况下,您不需要经常使用它,所以也许您的应用设计可以首先得到改进。
  • @dfsq 是的,我知道这句话有点含糊。 “很多”通常翻译为每当我使用某种外部事件系统时,例如 (jqLit​​e) DOM 事件。如果我正在阅读this answer correctly,那么这正是正确的用例。它仍然感觉,嗯,丑陋。

标签: javascript angularjs rendering render


【解决方案1】:

您可以改用$scope.$evalAsync()。这也可能会为您提供更好的性能,因为该操作可能会在已启动的摘要中执行。

参考:$scope.$evalAsync() vs. $timeout() In AngularJS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 2014-06-01
    • 2011-07-10
    • 2012-10-14
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多