我收到angularjs [$ rootScope:inprog]错误。
Error: [$rootScope:inprog] http://errors.angularjs.org/1.2.7/$rootScope/inprog?p0=%24digest
。
这是调用函数
Members.get({}, function (response) { // success
$scope.family_mem = response.data;
}, function (error) { // ajax loading error
Data.errorMsg(); // display error notification
});
在控制台中我通过php控制器功能得到结果。但是没有更新$scope.family_mem
而是转到错误部分。
这是指令
myApp.directive('mySelect', function() {
return{
restrict: 'A',
link: function(scope, element){
$(element).select2();
}
};
});
答案 0 :(得分:32)
通常这意味着您定义了$ rootScope。$在另一个已生效周期的角度代码中手动应用。在常见情况下不应该发生这种情况,因为角度跟踪生命周期本身。需要它的一个常见情况是你需要从非角度代码更新范围(比如jquery或老式的js东西)。所以请检查一下你是否有这个。如果你真的需要它,最好使用安全应用(公共代码片段):
angular.module('main', []).service('scopeService', function() {
return {
safeApply: function ($scope, fn) {
var phase = $scope.$root.$$phase;
if (phase == '$apply' || phase == '$digest') {
if (fn && typeof fn === 'function') {
fn();
}
} else {
$scope.$apply(fn);
}
},
};
});
然后您可以注入此服务并通过以下方式进行必要的呼叫:
scopeService.safeApply($rootScope, function() {
// you code here to apply the changes to the scope
});
答案 1 :(得分:5)
[$ rootScope:inprog] inprogress错误:
案例1:这意味着您一次执行两个操作。
示例:
goView();
hidePopOver(); //Will trigger error
使用 $ timeout 确保两个操作(功能)不会同时运行。
goView();
$timeout(function () {
hidePopOver();
}, 300);
案例2 :行动未完全执行 使用$ timeout确保第一个操作已执行。
$timeout(function () {
$(element.target).trigger('click');
}, 300);
答案 2 :(得分:0)
我遇到了同样的问题,但 time delay
像个魅力一样解决了我的问题。
$timeout(function () {
$(element.target).trigger('click');
}, 300);
如果触发器在 jquery/javascript 端。
setTimeout(function () {
$(element.target).trigger('click');
}, 300);