AngularJS: plusieurs vues avec routage sans perte de portée

Je suis en train de mettre en œuvre un classique de la liste/les détails de l'INTERFACE utilisateur. Lorsque vous cliquez sur un élément dans la liste, je veux afficher un formulaire d'édition pour cet article tout en affichant la liste. Je suis en train de travailler autour Angulaire de 1-vue-par-page de limitation et a décidé de le faire en ayant toutes les Url acheminés vers le même contrôleur/vue. (C'est peut-être la racine de mon problème et je suis ouvert à d'autres options.)

De routage:

$routeProvider
    .when('/list', { templateUrl: '/Partials/Users.html', controller: UserController })
    .when('/edit/:UserId', { templateUrl: '/Partials/Users.html', controller: UserController })
    .otherwise({ redirectTo: '/list' });

La vue (/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>

Contrôleur:

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);
}

Problèmes:

  1. Lorsque vous cliquez sur un lien d'édition, le contrôleur est réintroduit avec un nouveau champ d'application, j'ai donc ré-initialisation de la liste des Utilisateurs. (Dans un exemple plus complexe, je pourrais avoir une entrée de l'utilisateur stockées lié au modèle et cela permettrait aussi de se perdre.) Je préfère conserver le champ d'application de l'itinéraire précédent.
  2. Je préfère utiliser un contrôleur séparé (ou, comme beaucoup d'autres Angulaire développeurs se sont plaints, la possibilité d'avoir plusieurs affichée point de vue!) mais qui aboutit au même problème de la perte de portée.

source d'informationauteur Keith | 2013-04-18