我有一个带有各种屏幕的应用程序。每个屏幕都分配了一个网址,例如#
,mails
,contacts
等。
在我的主HTML文件中,我有一个ng-view
元素,它根据用户选择的路由进行更新。到目前为止,非常好。
现在其中一些屏幕有一个子导航。例如,#mails
确实有一个收件箱和一个已发送的文件夹。他们向自己展示了两列:左侧的子导航,右侧相应文件夹的邮件。
当您导航到#mails
时,它会将您重定向到#mails/inbox
,因此基本上收件箱是邮件的默认子视图。
我该如何设置?
我现在能想到的唯一方法(我对AngularJS很新,因此如果这个问题有点天真,请原谅我)是有两个视图,一个用于#mails/inbox
,另一个用于{ {1}}。
选择路线时,会加载这些视图。当您选择#mails/sent
时,只需将您重定向到#mails
。
但这意味着两个视图必须使用#mails/inbox
进行子导航。不知怎的,这对我来说是不对的。
我更想要的是拥有嵌套视图:顶部视图在屏幕之间切换,如邮件,联系人等,而底部视图在子视图(如收件箱,发送等)之间切换。
我该如何解决这个问题?
答案 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});