如何在AngularJS中设置嵌套视图?

时间:2013-03-17 11:32:22

标签: uiview angularjs nested

我有一个带有各种屏幕的应用程序。每个屏幕都分配了一个网址,例如#mailscontacts等。

在我的主HTML文件中,我有一个ng-view元素,它根据用户选择的路由进行更新。到目前为止,非常好。

现在其中一些屏幕有一个子导航。例如,#mails确实有一个收件箱和一个已发送的文件夹。他们向自己展示了两列:左侧的子导航,右侧相应文件夹的邮件。

当您导航到#mails时,它会将您重定向到#mails/inbox,因此基本上收件箱是邮件的默认子视图。

我该如何设置?

我现在能想到的唯一方法(我对AngularJS很新,因此如果这个问题有点天真,请原谅我)是有两个视图,一个用于#mails/inbox,另一个用于{ {1}}。

选择路线时,会加载这些视图。当您选择#mails/sent时,只需将您重定向到#mails

但这意味着两个视图必须使用#mails/inbox进行子导航。不知怎的,这对我来说是不对的。

我更想要的是拥有嵌套视图:顶部视图在屏幕之间切换,如邮件,联系人等,而底部视图在子视图(如收件箱,发送等)之间切换。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:31)

AngularJS ui-router解决了我的问题: - )

答案 1 :(得分:4)

另一个要检查的图书馆:http://angular-route-segment.com

您可以使用它而不是内置的ng-view$route

示例路由配置如下所示:

$routeSegmentProvider.

when('/section1',          's1.home').
when('/section1/prefs',    's1.prefs').
when('/section1/:id',      's1.itemInfo.overview').
when('/section1/:id/edit', 's1.itemInfo.edit').
when('/section2',          's2').

segment('s1', {
    templateUrl: 'templates/section1.html',
    controller: MainCtrl}).

within().

    segment('home', {
        templateUrl: 'templates/section1/home.html'}).

    segment('itemInfo', {
        templateUrl: 'templates/section1/item.html',
        controller: Section1ItemCtrl,
        dependencies: ['id']}).

    within().

        segment('overview', {
            templateUrl: 'templates/section1/item/overview.html'}).

        segment('edit', {
             templateUrl: 'templates/section1/item/edit.html'}).

        up().

    segment('prefs', {
        templateUrl: 'templates/section1/prefs.html'}).

    up().

segment('s2', {
    templateUrl: 'templates/section2.html',
    controller: MainCtrl});