El servicio funcionará, pero una forma lógica de hacerlo utilizando solo alcances y controladores ordinarios es configurar sus controladores y elementos para que reflejen la estructura de su modelo. En particular, necesita un elemento principal y un controlador que establezcan un alcance principal. Las páginas individuales del formulario deben residir en una vista que sea secundaria para el padre. El ámbito principal persiste incluso cuando se actualiza la vista secundaria.
Supongo que está utilizando ui-router para que pueda tener vistas con nombre anidadas. Luego, en pseudocódigo:
<div ng-controller="WizardController">
<div name="stepView" ui-view/>
</div>
Luego, WizardController define las variables de alcance que desea conservar en los pasos del formulario de varias páginas (al que me refiero como un "asistente"). Entonces tus rutas se actualizaránstepView
solo . Cada paso puede tener sus propias plantillas, controladores y ámbitos, pero sus ámbitos se pierden de una página a otra. Pero los ámbitos de WizardController se conservan en todas las páginas.
Para actualizar los ámbitos de WizardController desde los controladores secundarios, necesitará usar una sintaxis como $scope.$parent.myProp = 'value'
o definir una función setMyProp
en WizardController para cada variable de ámbito. De lo contrario, si intenta establecer las variables de alcance principal directamente desde los controladores secundarios, terminará creando una nueva variable de alcance en el niño mismo, sombreando la variable principal.
Es un poco difícil de explicar y me disculpo por la falta de un ejemplo completo. Básicamente, desea un controlador principal que establezca un alcance principal, que se conservará en todas las páginas de su formulario.