角度摘要循环

时间:2016-06-29 08:47:06

标签: angularjs infinite-loop digest

我的应用有问题,因为它在尝试生成表单时会产生无限循环周期。我的表单是基于json生成的(代码中的示例)。只有当我转到另一个步骤并返回到表单时才会出现问题。我不知道是什么导致了这个问题,因为它只会在第二次加载状态时发生。是否有可能角度保持观察者在之前的状态中创建并且它只是相互重叠?

关于这个应用程序的整个想法是你在“表单”部分中有表单定义,然后有一个“模式”定义每个模型元素,最后有一个“模型”存储所有变量。

<schema-form
    data-name     = "theemployeeform"
    data-schema   = "$ctrl.json.all_fields.schema"
    data-form     = "$ctrl.json.all_fields.form"
    data-model    = "$ctrl.json.model">
</schema-form>

要查看错误,请打开Chrome检查员并: 首页 - &gt;表格 - &gt;首页 - &gt;形成 Error: [$rootScope:infdig]

App example on Plunker https://plnkr.co/edit/nkdzwLuEO0RauZT1jpOJ?p=preview

2 个答案:

答案 0 :(得分:0)

查看您是否在范围内的属性上创建了自己的监视,并且每次手表执行时都尝试修改该属性的值

var app = angular.module('test', [])
app.controller('ctrl', function($scope) {
  $scope.val = 100;

  $scope.$watch('val',function(n,o){
     $scope.val= $scope.val+1;
  })

});

上面的例子创建了一个无限的摘要循环。通常情况下,摘要循环最多执行10次,最少2次,以检查手表中是否有任何属性更改...基本上它会进行脏检查

答案 1 :(得分:0)

问题出现在compile指令中,它取决于来自控制器的变量。因为当状态改变ng-include无法找到模板时,它试图加载index.html并导致问题。解决方案是在组件内手动编译模板。因为组件没有$postLink()作为指令,我们需要更改$element.contents().remove(); $templateRequest(templateUrl).then(function(html){ var template = angular.element(html); var compiledContents = $compile(template); compiledContents($scope, function(clone){ $element.append(clone); }); }); 并将编译放入其中。

http://hammerjs.github.io

{{1}}

这解决了一个问题。