2014-01-19 52 views
4

我有一個路由方案,其中#/articles導致articles.html視圖,而#/articles/featured導致featured.html。不過,我不確定如何聲明這個嵌套的文字。如果我按照以下方式配置我的路線,則#/articles#/articles/featured都會導致articles.html(因爲兩個路徑都匹配r'^ articles)。Angular Dart中的嵌套路由

library my_router; 

import 'package:angular/angular.dart'; 

class MyRouteInitializer implements RouteInitializer { 
    init(Router router, ViewFactory view) { 
    router.root 
     ..addRoute(
      name: 'articles', 
      path: '/articles', 
      enter: view('views/articles.html'), 
      mount: (Route route) => route 
      ..addRoute(
       name: 'featured', 
       path: '/featured', 
       enter: view('views/featured.html')) 

    ); 
    } 
} 

如果我省略了enter: view('views/articles.html')線,該#/articles/featured路線正確路線featured.html,但再沒有什麼路線articles.html

回答

6

當你定義它的預期,他們會通過嵌套ng-view s內呈現嵌套的看法,但它似乎並不像你真正想要的。您使用扁平結構的解決方法可能沒問題。或者你可以這樣做:

class MyRouteInitializer implements RouteInitializer { 
    init(Router router, ViewFactory view) { 
    router.root 
     ..addRoute(
      name: 'articles', 
      path: '/articles', 
      mount: (Route route) => route 
      ..addRoute(
       name: 'all', 
       path: '/all', 
       default: true, 
       enter: view('views/articles.html') 
      ..addRoute(
       name: 'featured', 
       path: '/featured', 
       enter: view('views/featured.html')) 
    ); 
    } 
} 
+0

謝謝,這非常有幫助。 –

+0

您能否使用嵌套的'ng-view'來返回示例 –

+0

@pavelgj我在主頁上只有一個ng-view。儘管路由嵌套在邏輯上,但它們不是通過嵌套的ng-views呈現的。那麼,我的路由器應該如何。建議在路由器中使用嵌套結構還是應該採用扁平結構? [這個問題是關於假設這種方法在這種情況下效果最好的最佳做法] – Amsakanna

3

我可以通過避免mount並定義從特定到一般的路由來解決此問題,但解決方案似乎很笨重且容易出錯。正確的方法是使用mount並正確嵌套路線,但我無法讓它工作。同時,這裏是一個臨時的解決方案:

import 'package:angular/angular.dart'; 

class MyRouteInitializer implements RouteInitializer { 
    init(Router router, ViewFactory view) { 
    router.root 
     ..addRoute(
      name: 'featured', 
      path: '/articles/featured', 
      enter: view('views/featured.html')) 
     ..addRoute(
      name: 'articles', 
      path: '/articles', 
      enter: view('views/articles.html')); 
    } 
} 
+0

這不重複的「/ articles」路徑前綴觸發多個匹配,以便不發生路由? – Moritz

+1

路線按順序排列。因此,'/ articles/featured'映射到'views/featured.html','/ articles'映射到'views/articles.html'。儘管如此,我會推薦接受的答案作爲路要走。 –