我已经长时间使用角度,直到现在还没有遇到很多问题。我有一个控制器,当发生ng-change事件时调用一个函数。我有一组不同的报告,这些报告是根据主控制器中定义的一些名为Principal(PrincipalController)的选择过滤器生成的。
大多数控制器工作正常并产生他们想要的东西,但是最后一个(AnalisisEvaluacionController)我正在努力。
它的视图在开始时正确加载。我在视图中打印名称,但是当我从ng-change事件调用该方法时,名称不会更改。我也有一个ng-repeat超过$ scope.notas这是行不通的。实际上这是真正的问题。我已经阅读过它,我已经尝试过了 $ scope。$ apply()和$ scope。$ digest()但错误
angular.js:14800 Error: [$rootScope:inprog] $apply already in progress is thrown
我创建了代码为https://bitbucket.org/snippets/jorguerra/Ee6G6y
的代码段我基本上有一个ng-repeat over evaluateacion.notas,它在调用函数generarInforme时被重新加载,它调用一个带有JSON的工厂,后者被分配给控制器中的$ scope.evaluacion。问题是我可以迭代或显示我需要显示的数据
答案 0 :(得分:0)
你不需要在ng-change处理程序中调用$ scope。$ apply(或$ digest),因为它的处理程序已经包含在$ scope。$ apply block中。但是,如果你需要在某些情况下调用$ scope。$ apply(或$ digest)(例如你的ng-change处理程序执行一些异步操作,之后你需要同步视图模型),你可以这样防止错误:
(scope.$$phase || scope.$root.$$phase) ? fn() : scope.$apply(fn);
您也可以将fn
封装在$timeout
块
$timeout(fn)
安全地应用$ scope。$ apply。
答案 1 :(得分:0)
我可以通过在AnalisisEvaluacionController中创建一个函数init来解决我的问题,该函数调用方法generarInforme并更改set所有必需的变量。