gpt4 book ai didi

javascript - 为什么 Angular 摘要循环在 UI 事件、$timeout 和 $http 上不同?

转载 作者:行者123 更新时间:2023-11-28 07:48:19 25 4
gpt4 key购买 nike

我一直在使用 1.2.27 开发 Angular 库,令我惊讶的是我正在查看这个结果:

$scope.myClickMethod = function () {
$scope.$$phase; // $apply
$scope.$apply(); // Gives digest error, of course
};

$timeout(function () {
$scope.$$phase; // null
$scope.$apply(); // Does not give a digest error
});

$http.get('/').then(function () {
$scope.$$phase; // $digest
$scope.$apply(); // Gives digest error
});

问题是,当使用 $timeout、$http 等时,您无法识别摘要循环已准备好运行。只有 ng-clicks 等。我的问题是......为什么它们不同?我认为 Angular 在这两种情况下都做了类似的事情:

$scope.myClickMethod = function AngularWrapper () {
$rootScope.$apply(function myOriginalMethod () {
// My code
});
};

$timeout(function AngularWrapper () {
$rootScope.$apply(function myOriginalTimoutFunction () {
// My code
});
});

为什么 UI 事件上 $$phase = $apply,$http 上 $$phase = $digest,$timeout 上 $$phase = null?它们本质上都是异步的,它们的行为如此不同是没有意义的。但我确信这是有充分理由的。有人知道吗?

我发现 1.3 使用新的 $applyAsync 方法对 $http 进行了一些更改。但没有测试过。

最佳答案

$timeout 回调在摘要循环结束时调用。

因此,因为您位于摘要循环之外,所以您可以调用 $apply 并且它会调用整个摘要循环。

对于其他方法(ng-click$http),它们在摘要循环期间调用。因此调用 $apply 将会给出错误,因为 AngularJS 不希望在摘要循环中出现摘要循环。

关于javascript - 为什么 Angular 摘要循环在 UI 事件、$timeout 和 $http 上不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27171067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com