В форме истории:
То, что я ищу здесь, - это настройка мастер-детали. Мастер находится в форме списка, и когда я нажимаю ссылку (относительно конкретной строки/записи (или Учетная запись в этом случае)), я хочу видеть детали в главном представлении (буквально, "основной" вид: <div class="container" ui-view="main"></div>).
Я хочу сделать это и сохранить свою структуру URL-адресов (/accounts для списка учетных записей; /accounts/:id для подробной версии) , но я хочу, чтобы представление детали использовало представление, в котором использовался список.
В настоящее время у меня
index.html
...
<div class="container" ui-view="main"></div>
...
accounts.js
$stateProvider
.state ('accounts', {
url: '/accounts',
views: {
'main': {
controller: 'AccountsCtrl',
templateUrl: 'accounts/accounts.tpl.html'
}
},
data: { pageTitle: 'Account' }
})
.state ('accounts.detail', {
url: '/:id',
views: {
'main': {
controller: 'AccountDetailCtrl',
templateUrl: 'accounts/detail.tpl.html'
}
},
data: { pageTitle: 'Account Detail' }
});
На этом этапе маршрут /accounts работает так, как ожидалось. Он отображает accounts/accounts.tpl.html правильно в представлении main. В этом html каждая строка в ретрансляторе связывает его с соответствующим URL /accounts/:id, с которым я обрабатываю вложенное состояние accounts.detail.
Что очевидно для большинства из вас, кто знает больше, чем я, мой accounts.detail будет отображать представление main , если этот именованный вид существует в шаблоне accounts/accounts.tpl.html, Это действительно так.
Но это не то, что я хочу. Я хочу, чтобы материал accounts.detail отображался в родительском представлении main; Я хочу, чтобы html accounts/detail.tpl.html заменил html accounts/accounts.tpl.html, найденный в index.html: <div class="container" ui-view="main"></div>.
Итак, как я мог это сделать?
МОЕ РЕШЕНИЕ В КОНТЕКСТЕ
Трюк заключается в том, что, как говорится в ответе, настроить схему URL для определения того, какое дочернее состояние является "по умолчанию". То, как я интерпретирую этот код на простом английском языке, состоит в том, что родительский класс является абстрактным с правильным URL-адресом, а дочерний класс "по умолчанию" имеет "тот же" URL-адрес (обозначается '').
Если вам нужна дополнительная ясность, просто опубликуйте комментарий, и я поделюсь советами.
.config(function config( $stateProvider ) { $stateProvider
.state ('accounts', {
abstract: true,
url: '/accounts',
views: {
'main': {
templateUrl: 'accounts/accounts.tpl.html',
controller: 'AccountsCtrl'
}
},
data: { pageTitle: 'Accounts' }
})
.state ('accounts.list', {
url: '',
views: {
'main': {
templateUrl: 'accounts/list.tpl.html',
controller: 'AccountsListCtrl'
}
},
data: { pageTitle: 'Accounts List' }
})
.state ('accounts.detail', {
url: '/:id',
views: {
'main': {
templateUrl: 'accounts/detail.tpl.html',
controller: 'AccountDetailCtrl'
}
},
data: { pageTitle: 'Account Detail' }
});