2014-01-19 10 views
4

У меня есть схема маршрутизации, где #/articles приводит к виду articles.html, а #/articles/featured ведет к featured.html. Я не уверен, как объявить это вложенное письмо. Если я настрою свои маршруты следующим образом, то и #/articles, и #/articles/featured приводит к articles.html (так как оба пути соответствуют r '^ статьям').Вложенные маршруты в Угловом Дарте

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 с, но это не кажется, что вы действительно хотите. Ваше обходное решение с использованием плоской структуры может быть в порядке. В качестве альтернативы вы можете сделать что-то вроде этого:

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-представлениями. Итак, как должен выглядеть мой маршрутизатор. Целесообразно ли иметь вложенную структуру в маршрутизаторе, или я должен искать плоскую структуру? [Вопрос касается наилучшей практики, предполагающей, что этот метод хорошо работает в этом сценарии] – 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

Не дублирует ли этот дублированный путь префикса пути/статей триггер, чтобы не было маршрутизации? – Moritz

+1

Маршруты согласованы по порядку. Итак, «/ articles/featured» отображает карты «views/featured.html» и «/ articles» в «views/articles.html». Тем не менее, я бы порекомендовал принятый ответ. –

Смежные вопросы