我是角度框架的新手。这是我的场景,我想在一段时间后更改我的$ 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
??
请给我一些使用它的例子和理由,以显示性能。
谢谢:)
答案 0 :(得分:26)
在某些情况下,需要执行某种超时操作,我们经常使用JavaScript的setTimeout()
函数实现此目的。
但是,如果我们在AngularJS应用程序中使用setTimeout()
,我们还需要使用$scope.$apply()
来确保scope
的任何更改都会反映在其他位置(即数据绑定在view
)。
AngularJS
为此提供了一个方便的包装:$timeout()
- 它为$apply()
提供了我们不必$apply
更改的内容。
关于效果。
如果您正在使用$timeout
创建基本上是间隔的内容,那么请不要使用它。如果您的应用程序很大,那么$apply
也会触发$digest
周期,您可能不希望它发生,这肯定会降低性能。
答案 1 :(得分:19)
从外部处理时(包括ajax)处理的任何AngularJS范围变量都需要$ apply()。
$ timeout()处理当前范围,并在完成所有更改检测后在相同的摘要周期中运行。
我最近发现的$ timeout()的一个美妙之处是,如果你没有传递时间参数,它将等待DOM完成。
所以,
$timeout(function(){
console.log("show after directive partial loaded")
}); //note, no time parameter
在指令中运行此代码,并且在指令加载部分后将触发超时回调函数
希望这有帮助。