Angular UI-Router: ребенок, использующий вид родителей

В форме истории:

То, что я ищу здесь, является настройкой мастер-детали. Мастер находится в форме списка, и когда я нажимаю на ссылку (относительно определенной строки / записи (или в данном случае для учетной записи)), я хочу видеть детали в главном представлении (буквально, в «главном» представлении:<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 каждая строка в повторителе связывает его с соответствующим/accounts/:id URL, который я обрабатываю с помощью вложенного состояния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' }
    });

Ответы на вопрос(2)

Ваш ответ на вопрос