Sto tentando di implementare un'interfaccia utente classica elenco/dettagli. Quando si fa clic su un elemento nell'elenco, desidero visualizzare un modulo di modifica per quell'articolo mentre continua a visualizzare l'elenco. Sto cercando di aggirare la limitazione di 1-visualizzazione per pagina di Angular e ho deciso di farlo collegando tutti gli URL allo stesso controller/vista. (Forse questo è la radice del mio problema e io sono aperto a soluzioni alternative.)AngularJS: visualizzazioni multiple con routing senza perdita di ambito
Routing:
$routeProvider
.when('/list', { templateUrl: '/Partials/Users.html', controller: UserController })
.when('/edit/:UserId', { templateUrl: '/Partials/Users.html', controller: UserController })
.otherwise({ redirectTo: '/list' });
La vista (/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>
controller :
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);
}
Problemi:
- Quando si fa clic su un collegamento di modifica, il controller viene ripristinato con un nuovo ambito, quindi devo riavviare l'elenco degli utenti. (In un esempio più complesso potrei avere un input dell'utente memorizzato legato al modello e questo andrebbe anche perso.) Preferirei mantenere lo scope dal percorso precedente.
- Preferirei utilizzare un controller separato (o, come molti altri sviluppatori angolari si sono lamentati, la possibilità di avere più viste visualizzate!) Ma questo porta allo stesso problema di perdere l'ambito.
possibile duplicato di [Angularjs, passaggio di ambito tra percorsi] (http://stackoverflow.com/questions/13882077/angularjs-passing-scope-between-routes) –