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

Posted

技术标签:

【中文标题】如何在 AngularJS 中设置嵌套视图?【英文标题】:How do I setup nested views in AngularJS? 【发布时间】:2013-03-05 19:30:31 【问题描述】:

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

在我的主 html 文件中,我有一个 ng-view 元素,它会根据用户选择的路线进行更新。到目前为止,一切顺利。

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

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

我该如何设置?

我目前能想到的唯一方法(我对 AngularJS 很陌生,因此如果这个问题有点幼稚,请原谅我)是有两个视图,一个用于#mails/inbox,另一个用于#mails/sent .

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

但这意味着两个视图都必须使用ng-include 进行子导航。不知何故,这让我感觉不对。

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

我将如何解决这个问题?

【问题讨论】:

据我所知,到目前为止,除了使用 ng-include 之外别无选择。这在未来可能会改变。 查看AngularJS - Complex nesting of partials and templates 并查看Angular ui-route。 是的,@Stewie 是对的。 ng-swith 现在是正确的方法 ui-router 绝对是你想要的。看看 - 我使用它取得了巨大的成功。 【参考方案1】:

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

【讨论】:

举手同意。在我只能处理基本上单一的路线之前,但 ui-router 允许您以最少的工作/请求“隧道”到您想要的地方。【参考方案2】:

另一个要查看的库: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);

【讨论】:

以上是关于如何在 AngularJS 中设置嵌套视图?的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs - 如何在服务中设置模块值?

如何在 AngularJS 指令范围中设置默认值?

如何在angularjs中设置范围滑块的时间?

AngularJS:如何在模板中设置变量?

如何在嵌套对象中设置状态

如何使用 RKObjectMapping 在嵌套的 RLMObject 中设置相同的主键?