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

Ise*_*mar 27 javascript settimeout angularjs angular-services

我是角度框架的新手.这是我的场景,我想在一段时间后更改我的$ scope.variable,所以我使用了javascript setTimeout方法.

$scope.variable = 'Previous';

setTimeout(function(){
  $scope.variable='NEXT';
},3000);
Run Code Online (Sandbox Code Playgroud)

这段代码对我不起作用.我曾经$apply()使这个代码工作.

后来我才知道angular本身有一个$ timeout服务,可以做同样的工作.

$scope.variable = 'Previous';

$timeout(function () {
  $scope.variable = 'NEXT';
}, 2000);
Run Code Online (Sandbox Code Playgroud)

我怎样才能比较$timeoutjavascript 的服务性能setTimeout

我们为什么要用$timeout而不是setTimeout??

请给我一些使用它的例子和理由,它显示了性能.

谢谢 :)

Nik*_*hri 28

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

但是,如果我们setTimeout()在AngularJS应用程序中使用,我们还需要使用它$scope.$apply()来确保对其他任何更改scope都会反映在其他地方(即数据绑定在a中view).

AngularJS为此提供了一个方便的包装器:$timeout()- 它$apply()为我们不需要进行$apply更改.

关于表现.

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


Tar*_*run 20

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

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

我最近发现的$ timeout()的一个美妙之处是,如果你没有传递time参数,它将等待DOM完成.

所以,

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

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

希望这可以帮助.

  • 此外,您可以将false作为第二个参数传递给$ timeout,它不会调用$ apply.当您想手动控制$ digest时很有用 (2认同)