Angular UI-Router: Kind, das die Ansicht der Eltern verwendet

In Form einer Geschichte:

Was ich hier suche, ist ein Master-Detail-Setup. Der Master ist in Listenform und wenn ich auf einen Link klicke (in Bezug auf eine bestimmte Zeile / einen bestimmten Datensatz (oder in diesem Fall ein Konto)), möchte ich die Details in der Hauptansicht sehen (wörtlich "Hauptansicht"):<div class="container" ui-view="main"></div>).

Ich möchte dies tun und meine URL-Struktur beibehalten (/accounts für die Liste der Konten;/accounts/:id für die ausführliche Version)Ich möchte jedoch, dass die Detailansicht die Ansicht verwendet, die in der Liste verwendet wurde.

Was ich aktuell habe

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

Zu diesem Zeitpunkt ist die/accounts Route funktioniert wie erwartet. Es zeigt anaccounts/accounts.tpl.html richtig in dermain Aussicht. Darinhtml Jede Zeile im Repeater verknüpft sie mit der entsprechenden/accounts/:id URL, die ich mit dem verschachtelten Status bearbeiteaccounts.detail.

Was für die Mehrheit von Ihnen, die mehr als ich darüber wissen, wahrscheinlich offensichtlich ist, meine Güteaccounts.detail wird in die Ansicht gerendertmain Wenn diese benannte Ansicht in der Vorlage vorhanden istaccounts/accounts.tpl.html. Das stimmt in der Tat.

Aber das will ich nicht. Ich will dasaccounts.detail Sachen zum Rendern im übergeordneten Elementmain Aussicht; Ich möchte das HTML vonaccounts/detail.tpl.html zuersetzen das html vonaccounts/accounts.tpl.html gefunden inindex.html: <div class="container" ui-view="main"></div>.

Wie könnte ich das erreichen?

MEINE LÖSUNG IM ZUSAMMENHANG Der Trick ist, wie die Antwort sagt, das URL-Schema einzurichten, um zu identifizieren, welcher untergeordnete Status "Standard" ist. Ich interpretiere diesen Code im Klartext so, dass die übergeordnete Klasse abstrakt mit der richtigen URL ist und die "standardmäßige" untergeordnete Klasse die "gleiche" URL hat (angezeigt durch'').

Wenn Sie weitere Klarheit benötigen, senden Sie einfach einen Kommentar und ich werde keine weiteren Anleitungen teilen.

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

Antworten auf die Frage(0)

Ihre Antwort auf die Frage