我试图了解如何处理Angular中的视图更新。当我使用本机异步函数并且它回调更新$ scope变量时,视图不会更新。但是当我使用Angular异步函数时,视图会正确更新。例如:
// Example 1: This code updates the store in view
$timeout(function() {
$scope.store = {
name: 'MyName'
}
}, 2000);
// Example 2: This code does not update the store in view
setTimeout(function () {
$scope.store = {
name: 'MyName'
}
}, 2000);
为什么第二个例子没有更新商店?
答案 0 :(得分:2)
这是因为Angular服务$timeout
知道Angular运行时并且会正确注册更改。
在进行更改后,可以通过调用范围内的$ apply()来使用vanilla js捕获相同的行为:
setTimeout(function () {
$scope.store = {
name: 'MyName'
}
$scope.$apply();
}, 2000);
还有其他服务,如$window
和$interval
,作为常规JS的便利包装,但它们确保任何$ scope更改都能正确注册到摘要周期。