如何在角度摘要运行时显示忙碌信息

时间:2016-12-15 19:12:41

标签: angularjs angular-digest

我有一个复杂的页面(嵌套了很多ng-repeats),所以摘要需要一段时间才能完成。我想向用户提供一些反馈,因此他们不认为浏览器已挂起。

下面是一个示例小提琴,当你单击HIT ME时$ watch挂起2秒钟。我想要"工作"要显示的消息,但它没有。

https://jsfiddle.net/jdhenckel/c7edvdt1/

var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope) {
    $scope.n = 0;
    $scope.test = function() {
        $scope.msg = 'Working...';
      $scope.n += 1;
    };      
    $scope.$watch(function(scope) { 
      return $scope.n; 
    }, function() {
      var x = Date.now() + 2000;
      while (x > Date.now()) {}
        $scope.msg = 'Done.';
    });    
});

我还尝试使用JQuery在摘要之前直接更改DOM,但这也没有用。似乎我唯一的选择是使用$ timeout将所有长时间运行的东西移动到未来的摘要中,但这似乎是一个黑客攻击!

是否有一种优雅的方式来通知用户摘要正在运行?

编辑:这是一个可能更现实的例子。

https://jsfiddle.net/jdhenckel/9vcLq0k3/

$scope.n = 0;
$scope.msg = 'Ready';
$scope.test = function() {
  $scope.msg = 'Working...';
  $timeout(function() {
    doStuff();
    $scope.msg = 'Done';
  }, 100);
}

这是有效的,因为我将所有昂贵的更改移至doStuff

我希望Angular会提供一种更简单的方法(例如ng-cloak进行初始化。)如果没有,那么我将继续使用$ timeout。

0 个答案:

没有答案