首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >$apply已在进行中错误

$apply已在进行中错误
EN

Stack Overflow用户
提问于 2013-09-05 08:46:09
回答 11查看 179.1K关注 0票数 140

堆栈跟踪:

代码语言:javascript
复制
Error: $apply already in progress
at Error (<anonymous>)
at beginPhase (file:///android_asset/www/built.min.js:7:22740)
at Object.Scope.$apply (file:///android_asset/www/built.min.js:7:25967)
at navigator.geolocation.getCurrentPosition.that (file:///android_asset/www/built.min.js:13:8670)
at Object.geolocation.getCurrentPosition (file:///android_asset/www/plugins/org.apache.cordova.core.geolocation/www/geolocation.js:122:13)
at Object.getCurrentPosition (file:///android_asset/www/built.min.js:13:8589)
at Object.getCurrentPosition (file:///android_asset/www/built.min.js:13:8277)
at Object.getCurrentCity (file:///android_asset/www/built.min.js:13:8941)
at Object.$scope.locateDevice (file:///android_asset/www/built.min.js:13:10480)
at file:///android_asset/www/built.min.js:7:12292:7

引用此代码http://pastebin.com/B9V6yvFu

代码语言:javascript
复制
    getCurrentPosition: cordovaReady(function (onSuccess, onError, options) {

        navigator.geolocation.getCurrentPosition(function () {
            var that = this,
                args = arguments;

            if (onSuccess) {
                $rootScope.$apply(function () {
                    onSuccess.apply(that, args);
                });
            }
        }, function () {
            var that = this,
                args = arguments;
            if (onError) {
                $rootScope.$apply(function () {
                    onError.apply(that, args);
                });
            }
        }, {
            enableHighAccuracy: true,
            timeout: 20000,
            maximumAge: 18000000
        });
    })

奇怪的是,在我的LG4X上它工作得很好,但是在我的三星s2上却抛出了上面的错误。你知道怎么回事吗?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-09-05 08:52:31

之所以会出现这个错误,是因为您正在现有的消化周期内调用$apply

最大的问题是:你为什么要打电话给$apply?你永远不需要调用$apply,除非你是从一个非角度事件进行接口的。$apply的存在通常意味着我做错了什么(除非$apply再次发生在非角度事件中)。

如果$apply确实适用于此,请考虑使用“安全应用”方法:

https://coderwall.com/p/ngisma

票数 109
EN

Stack Overflow用户

发布于 2014-10-23 20:39:32

只需使用$evalAsync而不是$apply

票数 57
EN

Stack Overflow用户

发布于 2013-09-05 18:51:10

您可以使用以下语句:

代码语言:javascript
复制
if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest') {
    $scope.$apply();
}
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18626039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档