javascript中的setTimeout和angularjs中的$timeout服务的区别

difference between setTimeout in javascript and $timeout service in angularjs

本文关键字:中的 服务 区别 timeout angularjs setTimeout javascript      更新时间:2023-09-26

我是angular框架的新手。下面是我的场景,我想更改$scope。变量在一段时间后,所以我使用javascript setTimeout方法。

$scope.variable = 'Previous';
setTimeout(function(){
  $scope.variable='NEXT';
},3000);

这段代码不适合我。我使用$apply()使这段代码工作。

后来我才知道angular本身也有一个$timeout服务来做同样的工作。

$scope.variable = 'Previous';
$timeout(function () {
  $scope.variable = 'NEXT';
}, 2000);

如何比较$timeout服务与javascript setTimeout的性能??

为什么我们应该使用$timeout而不是setTimeout ?

请给我一些使用它的例子和理由,这说明了性能。

谢谢

在某些情况下需要执行某种超时操作,我们通常使用JavaScript的setTimeout()函数来实现这一点。

然而,如果我们在AngularJS应用程序中使用setTimeout(),我们还需要使用$scope.$apply()来确保对scope的任何更改将在其他地方反映(即在view中绑定数据)。

AngularJS为这提供了一个方便的包装:$timeout() -它做$apply(),我们不需要$apply的变化。

关于性能

如果您使用$timeout来创建本质上是间隔的东西,那么不要使用它。如果您的应用程序很大,那么$apply也会触发$digest循环,您可能不希望它发生,它肯定会降低性能。

任何从外部处理的AngularJS作用域变量(包括ajax)都需要一个$apply()。

$timeout()负责当前范围,并在所有更改检测完成后在相同的摘要周期中运行。

我最近发现$timeout()的一个优点是,如果不传递time参数,它将等待DOM完成。

$timeout(function(){
  console.log("show after directive partial loaded")
}); //note, no time parameter

在指令中运行这段代码,超时回调函数将在该部分被指令

加载后触发。