angularjs$范围$apply()给出此错误:错误:[$rootScope:inprog]
angularjs $scope.$apply() gives this error: Error: [$rootScope:inprog]
我正在尝试更新属于$scope的页面上的一些文本。但我一直收到这个错误:
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)
显然我做错了什么你知道我该怎么解决这个问题吗?我希望页面更新到作用域中的新变量。
这是我用来更新的代码:
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和单独的控制器,如果这有什么关系的话?
如果您的模板在更改模型后没有更改,并且您需要使用$scope.$apply
,则可以使用$scope.$applyAsync
来代替此。
https://github.com/angular-ui/ui-codemirror/issues/73
您在函数changeLang
中使用$scope.$apply(...)
,因此会得到常见的"已在摘要中"错误。您不需要将对getTranslation
的调用放在$范围内$应用(…)块,因为ng-click
已经让您处理好了。把它拿出来,它应该会起作用的。此外,我建议使用angular for dev的非缩小版本运行,这样您就可以在控制台中看到更好的错误。
$evalAsync运行良好:
$scope.$evalAsync(function() {
// Code here
});
或者简单地说:
$scope.$evalAsync();
请参阅:https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$evalAsync
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 我如何修复包含在captcha的addthis中的错误
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- CKFinder 3为所选文件返回错误的URL
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 铬:“;未捕获的语法错误:意外的标记:"
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 相位器状态未捕获参考错误
- /undefined在我的404错误日志中多次出现
- 角度错误:[$rootScope:inprog]$已在文档上应用.单击()
- 如何将 AngularJS 模板呈现为字符串而不导致 InProg 错误
- $locationPath导致错误:[$rootScope:inprog]
- 错误:[$rootScope:inprog] $digest已经在进行中
- angularjs$范围$apply()给出此错误:错误:[$rootScope:inprog]