首页 > 解决方案 > 调用angularjs函数时出错

问题描述

调用函数时出现此错误

 Error: "[$rootScope:inprog] http://errors.angularjs.org/1.6.9/$rootScope/inprog?p0=%24digest"

但如果从控制台调用它,它工作正常。

angular.element('body').scope().set_active_counter(1);

功能看起来像这样

    $scope.set_active_counter = function (i) {
        $scope.$apply(function () {
            $scope.active_question_counter = i;
        });
        active_question_counter =  i;
    }

标签: angularjs

解决方案


“inprog”通常表示正在进行摘要。手动调用 $scope.$apply() 是原因。您唯一需要手动调用 $scope.$apply() 的情况是它是否在某种异步调用中,例如来自 $http 的回调或一个承诺。

为 $scope 变量“active_question_counter”赋值应该会自动触发摘要。但是因为您手动触发了摘要,并且在该摘要的范围内进行了更改,所以结果是“摘要已在进行中”错误。

您不需要在此处显式调用 $apply() ,除非有一些奇怪的幕后链接正在进行,而不会主动检测到某些事情发生了变化。如果是这种情况,一个 hacky 解决方法是将 $scope.$apply(...) 包装在 setTimeout() 中。

我不太确定为什么通过控制台中的 angular.elment().scope() 执行此操作有效。也许控制台在单独的上下文中运行?


推荐阅读