ウィザードを実装する単純なマルチビュー Angular アプリケーションがあるため、ユーザーが [次へ] ボタンをクリックするたびに、アプリは次のビューに移動し、[戻る] ボタンについても同じです。$routeProvider
すべてのビューを同じコントローラーにバインドする構成があります。各ビューは、入力フィールドを持つ巨大なフォームのチャンクを表し、$routeProvider
それらの間のナビゲーションを管理します:
app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider.when('/salespoints', {
templateUrl: 'salespoints',
controller: 'main'
})
.when('/users', {
templateUrl: 'users',
controller: 'main'
})
.otherwise({
templateUrl: 'partner',
controller: 'main'
});
$locationProvider.hashPrefix('');
}]);
問題は、ユーザーが「次へ」または「戻る」をクリックするたびにコントローラーが呼び出されるため、$scope
前のステップで行われたすべての変更が単純に失われることです。
app.controller('main', ['$scope', function ($scope) {
console.log('controller invoked'); // appears each time a user presses "Next" or "Back", hence re-instantiation of $scope
}]);
アプリケーションは$rootScope
、他のすべての方法が失敗した場合に頼るのに十分小さいですが、アンチパターンとしてそれを避けたいだけです.
$scope
アプリ インスタンスのライフサイクルの最初から行われたすべての変更を最新の状態に保ち、ビューを変更するたびに再インスタンス化せずに維持する最善の方法は何ですか?