Сервис будет работать, но логичный способ сделать это с использованием только обычных областей видимости и контроллеров - настроить контроллеры и элементы таким образом, чтобы они отражали структуру вашей модели. В частности, вам нужны родительский элемент и контроллер, которые устанавливают родительскую область. Отдельные страницы формы должны находиться в представлении, которое является дочерним по отношению к родительскому. Родительская область сохраняется даже при обновлении дочернего представления.
Я предполагаю, что вы используете ui-router, чтобы иметь вложенные именованные представления. Затем в псевдокоде:
<div ng-controller="WizardController">
<div name="stepView" ui-view/>
</div>
Затем WizardController определяет переменные области видимости, которые вы хотите сохранить на всех этапах многостраничной формы (которую я называю «мастером»). Тогда будут обновляться stepView
только ваши маршруты . Каждый шаг может иметь свои собственные шаблоны, контроллеры и области действия, но их области действия теряются от страницы к странице. Но области в WizardController сохраняются на всех страницах.
Чтобы обновить области WizardController из дочерних контроллеров, вам нужно будет использовать синтаксис, например, $scope.$parent.myProp = 'value'
или определить функцию setMyProp
в WizardController для каждой переменной области. В противном случае, если вы попытаетесь установить переменные родительской области видимости непосредственно из дочерних контроллеров, вы в конечном итоге просто создадите новую переменную области видимости для самого дочернего элемента, затеняя родительскую переменную.
Сложно объяснить, и я прошу прощения за отсутствие полного примера. По сути, вам нужен родительский контроллер, который устанавливает родительскую область, которая будет сохраняться на всех страницах вашей формы.