angularjs $scope.$apply() 给出了这个错误:错误:[$rootScope:inprog] [英] angularjs $scope.$apply() gives this error: Error: [$rootScope:inprog]
问题描述
我正在尝试更新属于 $scope 的页面上的一些文本.但我不断收到此错误:
I'm trying to update some texts on a page that is part of $scope. But I keep getting this error:
Error: [$rootScope:inprog] [http://errors.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply][1]
at Error (native)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:6:450
at m (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:101:443)
at h.$apply (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:108:301)
at h.$scope.changeLang (http://treenovum.es/xlsmedical/js/medical-app.js:80:16)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:169:382
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:186:390
at h.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:108:40)
at h.$apply (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:108:318)
at HTMLAnchorElement.<anonymous> (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js:186:372)
显然我做错了什么.:)关于如何解决这个问题的任何想法?我希望页面更新到范围内的新变量.
Obviously I'm doing something wrong. :) Any ideas of how I can fix this? I want the page to update to the new variables in the scope.
这是我用于更新的代码:
This is the code I'm using for updating:
medicalApp.controller('MainCtrl', function($scope, $cookies, getTranslation) {
getTranslation.get(function(data){
$scope.translation = data;
});
$scope.changeLang = function (lang) {
console.log(lang);
$cookies.lang = lang;
$scope.$apply(function(){
getTranslation.get(function(data){
$scope.translation = data;
console.log(JSON.stringify($scope.translation));
});
});
};
});
html:
<body ng-controller="MainCtrl">
...
<div class="header-lang col-xs-4">
<p>
<a href="#" ng-click="changeLang('de')">DE</a> |
<a href="#" ng-click="changeLang('fr')">FR</a></p>
<div>{{ translation.text }}</div> <---- Example variable I want updated.
...
我还在为我加载的每个页面使用带有单独控制器的 ngRoute,如果这与它有什么关系?
I'm also using ngRoute with separate controllers for each page I load, if that has anything todo with it?
推荐答案
你在函数 changeLang
中使用了 $scope.$apply(...)
所以你正在收到常见的已在摘要中"错误.您不需要将 getTranslation
的调用放在 $scope.$apply(...) 块中,因为 ng-click
已经由您处理了.把它拉出来,它应该可以工作.另外,我建议您使用非缩小版的 angular for dev 运行,这样您就可以在控制台中看到更好的错误.
You are using $scope.$apply(...)
inside the function changeLang
so you are getting the common 'already in a digest' error. You don't need to put the call to getTranslation
inside a $scope.$apply(...) block because ng-click
already has you taken care of. Yank that out and it should just work. Also, I'd recommend running with a non-minified version of angular for dev so you can see better errors in your console.
这篇关于angularjs $scope.$apply() 给出了这个错误:错误:[$rootScope:inprog]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!