Angular不会更新视图

时间:2018-03-12 03:39:31

标签: angularjs angularjs-ng-repeat

我已经长时间使用角度,直到现在还没有遇到很多问题。我有一个控制器,当发生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。问题是我可以迭代或显示我需要显示的数据

2 个答案:

答案 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所有必需的变量。