2016-06-29 12 views
1

Ich habe ein Problem mit meiner App, weil es Endlosschleife Zyklus erstellt, wenn versucht, Formular zu generieren. Mein Formular wird basierend auf JSON generiert (Beispiel im Code). Problem tritt nur auf, wenn ich zu einem anderen Schritt gehe und zurück zum Formular gehe. Ich habe keine Ahnung, was dieses Problem verursacht, weil es nur passiert, wenn der Zustand zum zweiten Mal geladen wird. Ist es möglich, dass Angular Keep Watcher im vorherigen Zustand erstellt wurden und sich einfach überlappen?Angular Digest-Schleife

Ganze Idee über diese App ist, dass Sie Formulardefinition in "Form" Abschnitt haben, dann gibt es ein "Schema", die jedes Modellelement definieren und am Ende gibt es ein "Modell", das alle Variablen speichert.

<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> 

Um zu sehen, Fehler bitte Chrom Inspektoren öffnen und: Home -> Form -> Startseite -> Formular Error: [$rootScope:infdig]

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

Antwort

0

Sehen Sie, wenn Sie eine Uhr der eigenen auf dem erstellten Eigenschaften, die sich im Bereich befinden und versuchen, den Wert dieser Eigenschaft jedes Mal zu ändern, wenn die Uhr ausgeführt wird, wie unter

Das obige Beispiel erstellt eine unendliche Digest-Schleife. Normal Digest-Schleifen wird für maximal 10 mal und mindestens 2 mal ausgeführt, nur um zu überprüfen, ob eine Eigenschaft in der Uhr geändert wurde oder nicht ... im Grunde ist es eine schmutzige Überprüfung

+0

Das ist ein Problem, ich habe häufige Fehler mit Beobachtern durchgemacht, aber ich habe kein Ereignis erstellt (manuell). Dasselbe Beispiel, es wird kein $ watch manuell erstellt und keine Änderungen an den Daten vorgenommen. Bearbeiten: um genau zu sein gibt es Beobachter in Form-Element-Komponente, aber diese Uhr ist zugewiesenen Schlüssel zugeordnet und dieser Schlüssel ändert sich nicht. Problem ist, warum dieser Fehler nur angezeigt wird, wenn der Status erneut geladen wird und nicht, wenn er zum ersten Mal geladen wird. Auch wenn Sie diesen Beobachterfehler entfernen, wird angezeigt. – piro

0

Problem war in ng-include Richtlinie, die war abhängig von der Variablen vom Controller. Weil, wenn der Status geändert wurde, ng-include konnte keine Vorlage finden, versuchte es, index.html zu laden, und das verursachte ein Problem. Lösung dafür ist, Vorlage manuell innerhalb der Komponente zu kompilieren. Da die Komponente compile als Direktive nicht hat, müssen wir $postLink() ändern und eine Kompilierung darin einfügen.

https://plnkr.co/edit/N2kUSCljMxaWTS7bZ2uC?p=preview

$element.contents().remove(); 
$templateRequest(templateUrl).then(function(html){ 
    var template = angular.element(html); 
    var compiledContents = $compile(template); 
    compiledContents($scope, function(clone){ 
     $element.append(clone); 
    }); 
}); 

Dies löst ein Problem.