Ответ 1
Я думаю, что лучший способ сделать это - использовать ng-switch
, только один контроллер, один маршрут, без перезагрузки, используя переменные, общие для всех шагов, например:
<div ng-controller="stepCtrl">
<div ng-switch="step">
<div ng-switch-when="1">
<!-- here you can include your step 1 template,
or simply just hardcode it here: -->
<div ng-include src="'.../step1.html'">
<button ng-click="setStep(1)"></button>
</div>
<div ng-switch-when="2">
<div ng-include src="'.../step2.html'">
<button ng-click="setStep(2)"></button>
</div>
<div ng-switch-when="3">
<div ng-include src="'.../step3.html'">
<button ng-click="setStep(3)"></button>
</div>
</div>
</div>
yourApp.controller('stepCtrl',function($scope){
$scope.step = 1;
$scope.setStep = function(step){
$scope.step = step;
}
});
Таким образом вы также можете манипулировать URL-адресом, чтобы добавить шаг в конец вашего текущего местоположения.
ОБНОВЛЕНИЕ:
На самом деле этот ответ давно, в наши дни я лично предпочитаю использовать ui-router, который является отличным модулем, который вы можете ввести в приложение AngularJs и сделать его еще более крутым с вложенными представлениями. Говоря о вложенных представлениях, ниже приводится мой новый подход к многопоточной форме с некоторой анимацией:
Сначала:
Using $stateProvider declare any steps you want in separate views :
app.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('wizard', {// this will be the wrapper for our wizard
url: '/wizard',
templateUrl: 'wizard.html',
controller: 'wizardController'
})
.state('wizard.stepOne', {// this will be the wrapper for our wizard
url: '/stepOne',
templateUrl: 'stepOne.html',
controller: 'wizardController'
})
.state('wizard.stepTwo', {// this will be the wrapper for our wizard
url: '/stepTwo',
templateUrl: 'stepTwo.html',
controller: 'wizardController'
})
Затем в нашем "wizard.html" мы можем иметь что-то вроде этого:
<div id="container">
<div>
<h2>Our multistep form wizard</h2>
<div id="status-buttons" class="text-center">
<a ui-sref-active="active" ui-sref=".stepOne"><span>1</span> Step One</a>
<a ui-sref-active="active" ui-sref=".stepTwo"><span>2</span> Step Two </a>
</div>
</div>
<!-- Here we specify our view that is a container for our subviews(steps) , which in our case can be a form !-->
<form id="signup-form" ng-submit="submit()">
<!-- nested state views will be inserted here -->
<div ui-view></div>
</form>
</div>
И, очевидно, для наших шагов мы должны иметь разделенные html файлы. Таким образом, у нас все еще есть один контроллер, url будет обновлен, и мы также можем добавить анимацию angular.