Я пытаюсь реализовать классический интерфейс списка/деталей. Когда вы нажимаете элемент в списке, я хочу отобразить форму редактирования для этого элемента, все еще отображая список. Я пытаюсь обойти ограничение Angular 1-view-per-page и решил сделать это, указав все URL-адреса на один и тот же контроллер/просмотр. (Возможно, это корень моей проблемы, и я открыт для альтернатив.)
Routing:
$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 разработчики жаловались, возможность иметь несколько отображаемых представлений!), но это приводит к той же проблеме потери области.