我有一个建议来实现这样的超时:
  $timeout(function() {
    // Loadind done here - Show message for 3 more seconds.
    $timeout(function() {
      $scope.showMessage = false;
    }, 3000);
  }, 2000);
};
有人可以告诉我使用它而不是使用 setTimeout 的原因/优势是什么?
我有一个建议来实现这样的超时:
  $timeout(function() {
    // Loadind done here - Show message for 3 more seconds.
    $timeout(function() {
      $scope.showMessage = false;
    }, 3000);
  }, 2000);
};
有人可以告诉我使用它而不是使用 setTimeout 的原因/优势是什么?
在基本词汇中$timeout是指 angularjs 时setTimeout- 到 JavaScript。
如果您仍然想使用setTimeout因此您需要调用$scope.$apply()之后
作为旁注
我建议你阅读How do I “think in AngularJS” if I have a jQuery background?帖子
和AngularJS: use $timeout, not setTimeout
   $scope.timeInMs = 0;
  
    var countUp = function() {
        $scope.timeInMs+= 500;
        $timeout(countUp, 500);
    }    
    $timeout(countUp, 500); 
 $scope.timeInMs_old = 0;
  
    var countUp_old = function() {
        $scope.timeInMs_old+= 500;        
        setTimeout(function () {
        $scope.$apply(countUp_old);
    }, 500);
    }
        
    setTimeout(function () {
        $scope.$apply(countUp_old);
    }, 500);
演示Fiddle
JS
function promiseCtrl($scope, $timeout) { 
 $scope.result = $timeout(function({ 
 return "Ready!"; 
 }, 1000); 
}
HTML
<div ng-controller="promiseCtrl"> 
 {{result || "Preparing…"}}
</div> 
考虑我们有一些 3d 方代码(不是 AngularJS),比如 Cloudinary 插件,它上传一些文件并返回我们“进度”百分比回调。
     // .....
     .on("cloudinaryprogress",
           function (e, data) {
               var name = data.files[0].name;
               var file_ = $scope.file || {};
               file_.progress = Math.round((data.loaded * 100.0) / data.total);
                               
                                
                $timeout(function(){
                     $scope.file = file_;
                }, 0);         
            })
我们想更新我们的 UI aka $scope.file = file_;
所以empty $timeout为我们完成了这项工作,它将触发摘要循环,并且$scope.file由 3d 方更新将在 GUI 中重新渲染
AngularJS 通过提供自己的事件处理循环来修改正常的 JavaScript 流程。这将 JavaScript 拆分为经典和 AngularJS 执行上下文。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性监视等。
通过使用 AngularJS $timeout 服务,包装setTimeout将在 AngularJS 执行上下文中执行。
有关详细信息,请参阅