O serviço funcionará, mas uma maneira lógica de fazê-lo usando apenas escopos e controladores comuns é configurar seus controladores e elementos de forma que reflitam a estrutura do seu modelo. Em particular, você precisa de um elemento pai e controlador que estabeleça um escopo pai. As páginas individuais do formulário devem residir em uma visualização filha do pai. O escopo pai persiste mesmo quando a visualização filho é atualizada.
Suponho que você esteja usando ui-router para que possa ter visualizações nomeadas aninhadas. Então, em pseudocódigo:
<div ng-controller="WizardController">
<div name="stepView" ui-view/>
</div>
Em seguida, WizardController define as variáveis de escopo que você deseja preservar nas etapas do formulário de várias páginas (ao qual estou me referindo como um "assistente"). Então, suas rotas serão atualizadas stepView
apenas. Cada etapa pode ter seus próprios modelos, controladores e escopos, mas seus escopos são perdidos de página para página. Mas os escopos em WizardController são preservados em todas as páginas.
Para atualizar os escopos WizardController dos controladores filhos, você precisará usar sintaxe como $scope.$parent.myProp = 'value'
ou definir uma função setMyProp
em WizardController para cada variável de escopo. Caso contrário, se você tentar definir as variáveis de escopo pai diretamente dos controladores filhos, você acabará apenas criando uma nova variável de escopo no próprio filho, sombreando a variável pai.
É meio difícil de explicar e peço desculpas pela falta de um exemplo completo. Basicamente, você deseja um controlador pai que estabeleça um escopo pai, que será preservado em todas as páginas do formulário.