当前位置: 首页 > 面试题库 >

在AngularJS中使用$ timeout而不是window.setTimeout有什么优势?

穆德海
2023-03-14
问题内容

我建议实施这样的超时:

  $timeout(function() {

    // Loadind done here - Show message for 3 more seconds.
    $timeout(function() {
      $scope.showMessage = false;
    }, 3000);

  }, 2000);
};

有人可以告诉我使用此方法而不使用setTimeout的原因/优势是什么?


问题答案:

用基本的话$timeout指的是angularjs when-指setTimeoutJavaScript。

如果您仍然认为要使用setTimeout,则需要$scope.$apply()在之后调用

示例1:$ timeout

   $scope.timeInMs = 0;

    var countUp = function() {
        $scope.timeInMs+= 500;
        $timeout(countUp, 500);
    }    
    $timeout(countUp, 500);

示例2:setTimeout(相同的逻辑)

 $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](http://jsfiddle.net/fq4vg/206/)**

$超时也返回一个承诺

JS

functhtml" target="_blank">ion 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 $scope.file = file_;

因此,为我们 做空 $timeout的工作将触发摘要周期,$scope.file并由3d party更新后将在GUI中重新渲染



 类似资料:
  • 问题内容: 不久前,我问了一个有关SQL Server中的层次结构/版本号排序的问题。( 如何使用SQL Server查询一般地对“版本号”列进行排序 )。 在提交的答案中,有一个与TSQL编码挑战的链接与此相似。 在SQL2000解决方案中,作者演示了两种变体,一种使用并返回varchar,另一种使用varbinary。作者解释说他正在这样做,而没有解释为什么。 因此,我的问题是,方法上的主要区

  • 问题内容: 我已经使用AngularJS了一段时间,并且发现需要不时使用$ timeout (似乎通常是初始化jQuery插件)。 最近,我一直在尝试更好地和更深入地了解摘要周期,并且遇到$ evalAsync 函数。 似乎该函数产生与相似的结果,只是您不给它延迟。每次使用时,它的延迟都为0,所以现在我想知道是否应该使用它。 两者之间有根本区别吗?您会在哪种情况下使用另一种情况?我想更好地了解何时

  • sizeof(char)和sizeof(bool)都等于1(在我的编译器/系统/whatever中,我听说它并不总是相同的值),一个bool只能存储true或false,而char可以接受更多的值,并且可以使用按位运算符充当多个bool变量(8位,每个位可以用作1 bool共8个bool) 那么使用bool而不是char有什么好处吗? 那么除了可读性,还有别的吗?我在某处读到,int比short或

  • 问题内容: 在PHP 中使用Heredoc有什么优势,您可以举个例子吗? 问题答案: Heredoc语法对我来说更干净,它对于多行字符串和避免引用问题确实很有用。回到过去,我曾经用它们来构造SQL查询: 对我来说,引入语法错误的可能性比使用引号的可能性低: 另一点是要避免在字符串中转义双引号: 上面的pProblem是我刚刚引入的语法错误(缺少的转义引号),与此处的文档语法相反: 这有点风格,但是

  • 我理解JoinColumn和mappedBy的两个JPA注释之间的一般区别,以及oneToMany关系应该使用mappedBy。我理解这是为了确保hibernate(或者我使用的任何JPA工具)识别双向关系,而不是碰巧共享列的两个单向关系。 然而,我想更好地理解为什么这很重要?我认为识别双向关系允许更优化地存储或获取数据,但谁能给我一个如何的例子?如果我有一个带有许多子对象的父对象,并且我用Joi

  • 我碰巧知道,在下面的表达式中,使用将导致无限流,将始终为0。我之所以困惑是因为我认为返回的值没有被使用,即便如此,它也不应该中断之后的增量。