私は古典的なリスト/詳細のUIを実装しようとしています。リスト内のアイテムをクリックすると、のリストが表示されたまま、そのアイテムの編集フォームが表示されます。私はAngularの1ページあたりの表示数の制限を回避しようとしており、すべてのURLを同じコントローラ/ビューにルーティングすることでこれを行うことにしました。 (おそらくこれは私の問題の根本であり、私は選択肢に開いている。)AngularJS:範囲を失うことなくルーティングする複数のビュー
ルーティング:
$routeProvider
.when('/list', { templateUrl: '/Partials/Users.html', controller: UserController })
.when('/edit/:UserId', { templateUrl: '/Partials/Users.html', controller: UserController })
.otherwise({ redirectTo: '/list' });
ビュー(/Partials/Users.html):
<!-- List of users -->
<div ng-repeat="user in Users">
<a href="*/edit/{{ user.Id }}">Edit {{ user.Name }}</a>
</div>
<!-- Edit form -->
<div>
{{ SelectedUser.Name }}
</div>
コントローラ:
function UserController($scope, $routeParams) {
// the model for the list
$scope.Users = GetUserListFromService();
// the model for the edit form
if ($routeParams.UserId != null)
$scope.SelectedUser = GetUserFromService($routeParams.UserId);
}
問題:
- 編集リンクをクリックすると、コントローラーは新しいスコープで再インスタンス化されるので、ユーザーリストを再初期化する必要があります。 (より複雑な例では、モデルにバインドされたユーザーからの入力を受け取ることができますが、これも失われます)。私は以前のルートからスコープを維持することをお勧めします。
- 私は別のコントローラ(または、他の多くのAngular開発者が表示された複数のビューを持つことができると嘆いていますが)を使用したいのですが、これはスコープを失うという同じ問題につながります。
[Angularjs、ルート間の通過範囲]の複製が可能です(http://stackoverflow.com/questions/13882077/angularjs-passing-scope-between-routes) –