javascript中的setTimeout和angularjs中的$timeout服务之间的差异

javascript中的setTimeout和angularjs中的$timeout服务之间的差异,javascript,angularjs,settimeout,angular-services,Javascript,Angularjs,Settimeout,Angular Services,我不熟悉angular框架。下面是我的场景,我想在一段时间后更改$scope.variable,所以我使用了javascriptsetTimeout方法 $scope.variable = 'Previous'; setTimeout(function(){ $scope.variable='NEXT'; },3000); 这个代码对我不起作用。我使用了$apply()来实现这段代码 后来我才知道angular本身有一个$timeout服务,它做同样的工作 $scope.variable

我不熟悉angular框架。下面是我的场景,我想在一段时间后更改$scope.variable,所以我使用了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

请给我一些例子和理由来使用它,这表明性能


谢谢:)

从外部(包括ajax)处理任何AngularJS范围变量时,都需要$apply()

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

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

所以

在指令中运行此代码,一旦指令加载了分部代码,就会触发超时回调函数


希望这有帮助。

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

但是,如果我们在AngularJS应用程序中使用
setTimeout()
,我们还需要使用
$scope.$apply()
,以确保对
作用域的任何更改都将反映在别处(即
视图中的数据绑定)

AngularJS
为此提供了一个方便的包装器:
$timeout()
-它执行
$apply()
,我们不必对其进行
$apply
更改

关于性能


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

此外,您可以将false作为第二个参数传递给$timeout,它不会调用$apply。当您想要手动控制$digest时非常有用答案在细节上含糊不清,可能包含不正确的信息。关于指令用法的语句很牵强,并没有真正解释它与setTimeout+$scope.$apply的区别
$timeout(()=>{…},…)
setTimeout(()=>$scope.$apply(…),…)
基本相同,只是前者可以与
$timeout.flush()
同步测试(另外,它还可以选择跳过摘要)。性能完全取决于当前应用程序中摘要周期的性能$超时将导致摘要。对于拥有大量观察者的应用程序,
$rootScope.$digest()
使应用程序冻结,它将再次冻结。就这么简单。
$timeout(function(){
  console.log("show after directive partial loaded")
}); //note, no time parameter