Le service fonctionnera, mais une manière logique de le faire en utilisant uniquement des portées et des contrôleurs ordinaires consiste à configurer vos contrôleurs et éléments de manière à ce qu'ils reflètent la structure de votre modèle. En particulier, vous avez besoin d'un élément parent et d'un contrôleur qui établissent une portée parent. Les pages individuelles du formulaire doivent résider dans une vue qui est un enfant du parent. L'étendue parent persiste même lorsque la vue enfant est mise à jour.
Je suppose que vous utilisez ui-router afin que vous puissiez avoir des vues nommées imbriquées. Puis en pseudo-code:
<div ng-controller="WizardController">
<div name="stepView" ui-view/>
</div>
Ensuite, WizardController définit les variables de portée que vous souhaitez conserver à travers les étapes du formulaire multi-pages (que je qualifie d '«assistant»). Ensuite, vos itinéraires seront mis à jour stepView
uniquement. Chaque étape peut avoir ses propres modèles, contrôleurs et étendues, mais leurs étendues sont perdues de page en page. Mais les étendues de WizardController sont conservées sur toutes les pages.
Pour mettre à jour les étendues WizardController à partir des contrôleurs enfants, vous devez utiliser une syntaxe similaire à celle-ci $scope.$parent.myProp = 'value'
ou définir une fonction setMyProp
sur WizardController pour chaque variable d'étendue. Sinon, si vous essayez de définir les variables de portée parent directement à partir des contrôleurs enfants, vous finirez par créer simplement une nouvelle variable de portée sur l'enfant lui-même, en ombrant la variable parente.
Un peu difficile à expliquer et je m'excuse pour le manque d'exemple complet. Fondamentalement, vous voulez un contrôleur parent qui établit une portée parent, qui sera préservée sur toutes les pages de votre formulaire.