Usługa będzie działać, ale logicznym sposobem na zrobienie tego przy użyciu tylko zwykłych zakresów i kontrolerów jest skonfigurowanie kontrolerów i elementów tak, aby odzwierciedlały strukturę Twojego modelu. W szczególności potrzebny jest element nadrzędny i kontroler, które ustanawiają zakres nadrzędny. Poszczególne strony formularza powinny znajdować się w widoku będącym dzieckiem rodzica. Zakres nadrzędny utrzymuje się nawet po zaktualizowaniu widoku podrzędnego.
Zakładam, że używasz routera ui, więc możesz mieć zagnieżdżone nazwane widoki. Następnie w pseudokodzie:
<div ng-controller="WizardController">
<div name="stepView" ui-view/>
</div>
Następnie WizardController definiuje zmienne zakresu, które chcesz zachować na kolejnych etapach wielostronicowego formularza (który nazywam „kreatorem”). Wtedy Twoje trasy zostaną zaktualizowane stepView
. Każdy krok może mieć własne szablony, kontrolery i zakresy, ale ich zakresy są tracone ze strony na stronę. Ale zakresy w WizardController są zachowywane na wszystkich stronach.
Aby zaktualizować zakresy WizardController z kontrolerów podrzędnych, musisz użyć składni takiej jak $scope.$parent.myProp = 'value'
lub zdefiniować funkcję setMyProp
w WizardController dla każdej zmiennej zakresu. W przeciwnym razie, jeśli spróbujesz ustawić zmienne zakresu nadrzędnego bezpośrednio z kontrolerów podrzędnych, w końcu utworzysz nową zmienną zakresu na samym dziecku, cieniując zmienną nadrzędną.
Trochę trudne do wyjaśnienia i przepraszam za brak pełnego przykładu. Zasadniczo potrzebujesz kontrolera nadrzędnego, który ustanawia zakres nadrzędny, który zostanie zachowany na wszystkich stronach formularza.