Der Dienst wird funktionieren, aber eine logische Methode, um nur normale Bereiche und Controller zu verwenden, besteht darin, Ihre Controller und Elemente so einzurichten, dass sie die Struktur Ihres Modells widerspiegeln. Insbesondere benötigen Sie ein übergeordnetes Element und einen Controller, die einen übergeordneten Bereich festlegen. Die einzelnen Seiten des Formulars sollten sich in einer Ansicht befinden, die dem Elternteil untergeordnet ist. Der übergeordnete Bereich bleibt bestehen, auch wenn die untergeordnete Ansicht aktualisiert wird.
Ich gehe davon aus, dass Sie einen UI-Router verwenden, damit Sie benannte benannte Ansichten haben können. Dann im Pseudocode:
<div ng-controller="WizardController">
<div name="stepView" ui-view/>
</div>
Anschließend definiert WizardController die Bereichsvariablen, die Sie in den Schritten des mehrseitigen Formulars (das ich als "Assistent" bezeichne) beibehalten möchten. Dann werden stepView
nur Ihre Routen aktualisiert . Jeder Schritt kann seine eigenen Vorlagen, Controller und Bereiche haben, aber ihre Bereiche gehen von Seite zu Seite verloren. Die Bereiche in WizardController bleiben jedoch auf allen Seiten erhalten.
Um die WizardController-Bereiche von den untergeordneten Controllern aus zu aktualisieren, müssen Sie für jede Bereichsvariable $scope.$parent.myProp = 'value'
eine Syntax wie oder eine Funktion setMyProp
in WizardController definieren. Wenn Sie andernfalls versuchen, die übergeordneten Bereichsvariablen direkt über die untergeordneten Controller festzulegen, erstellen Sie am Ende nur eine neue Bereichsvariable für das untergeordnete Steuerelement selbst und schattieren die übergeordnete Variable.
Etwas schwer zu erklären und ich entschuldige mich für das Fehlen eines vollständigen Beispiels. Grundsätzlich möchten Sie einen übergeordneten Controller, der einen übergeordneten Bereich erstellt, der auf allen Seiten Ihres Formulars beibehalten wird.