gpt4 book ai didi

AngularJS : Prevent error $digest already in progress when calling $scope. $申请()

转载 作者:行者123 更新时间:2023-12-03 03:52:00 26 4
gpt4 key购买 nike

我发现自从用 Angular 构建应用程序以来,我越来越需要手动将页面更新到我的范围。

我知道执行此操作的唯一方法是从 Controller 和指令的范围内调用 $apply()。这样做的问题是它不断向控制台抛出错误,内容如下:

Error: $digest already in progress

有谁知道如何避免此错误或以不同的方式实现相同的目标?

最佳答案

来自最近与 Angular 人员就这个主题进行的讨论:出于面向 future 的原因,您不应该使用 $$phase

当被问及“正确”的方法时,答案是当前

$timeout(function() {
// anything you want can go here and will safely be run on the next digest.
})

我最近在编写 Angular 服务来包装 facebook、google 和 twitter API 时遇到了这个问题,这些 API 在不同程度上都传递了回调。

这是一个来自服务内部的示例。 (为了简洁起见,服务的其余部分——设置变量、注入(inject) $timeout 等——已被省略。)

window.gapi.client.load('oauth2', 'v2', function() {
var request = window.gapi.client.oauth2.userinfo.get();
request.execute(function(response) {
// This happens outside of angular land, so wrap it in a timeout
// with an implied apply and blammo, we're in action.
$timeout(function() {
if(typeof(response['error']) !== 'undefined'){
// If the google api sent us an error, reject the promise.
deferred.reject(response);
}else{
// Resolve the promise with the whole response if ok.
deferred.resolve(response);
}
});
});
});

请注意,$timeout 的延迟参数是可选的,如果未设置,则默认为 0( $timeout 调用 $browser.defer ,其中 defaults to 0 if delay isn't set )

有点不直观,但这是编写 Angular 的人的答案,所以这对我来说已经足够了!

关于AngularJS : Prevent error $digest already in progress when calling $scope. $申请(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729122/

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