2014-01-28 5 views
1

Я настроил мой RouteInitializer следующим образом:Extra/при перенаправлении маршрут по умолчанию

class AppRouteInitializer implements RouteInitializer { 

    init(Router router, ViewFactory view) { 
    router.root 
     ..addRoute(
      name: 'root', 
      path: '/lounge_client_demo/web/lounge_client_demo.html', 
      mount: (Route route) => route 
      ..addRoute(
       name: 'lobby', 
       path: '#lobby', 
       enter: view('views/LobbyView.html')) 
      ..addRoute(
       name: 'chat', 
       path: '#chat', 
       enter: view('views/ChatView.html')) 
      ..addRoute(
       name: 'default', 
       defaultRoute: true, 
       enter: (_) => router.go('lobby', {'param': ':param'}, startingFrom: route, replace: false)) 
    ); 
    } 

} 

URL-адрес, чтобы лоббировать и общение:

http://127.0.0.1:3030/lounge_client_demo/web/lounge_client_demo.html#lobby http://127.0.0.1:3030/lounge_client_demo/web/lounge_client_demo.html#chat

работают, как ожидалось. Но, когда я подам URL, как:

http://127.0.0.1:3030/lounge_client_demo/web/lounge_client_demo.html

или

http://127.0.0.1:3030/lounge_client_demo/web/lounge_client_demo.html#xxx

правило в defaultRoute продюсирует следующий неправильный URL:

http://127.0.0.1:3030/lounge_client_demo/web/lounge_client_demo/.html#lobby

Am Я предполагаю, что здесь что-то не так, или это просто ошибка?

UPDATE: Ведение журнала показывает, что точка в URL-адресе экранирована и может быть неправильно преобразована в целевой URL.

2014-01-29 01:20:18.026: FINEST : route /lounge_client_demo/web/lounge_client_demo.html [Route: null] 
2014-01-29 01:20:18.035: FINEST : _processNewRoute /lounge_client_demo/web/lounge_client_demo.html 
2014-01-29 01:20:18.047: FINEST : route [Route: root] 
2014-01-29 01:20:18.055: FINEST : _processNewRoute 
2014-01-29 01:20:18.066: FINEST : go /lounge_client_demo/web/lounge_client_demo\.html#lobby 
2014-01-29 01:20:18.075: FINEST : route #lobby [Route: root] 
2014-01-29 01:20:18.087: FINEST : _processNewRoute #lobby 
2014-01-29 01:20:18.099: FINEST : route [Route: default] 
2014-01-29 01:20:18.108: FINEST : route [Route: lobby] 

UPDATE: Я скопировал lounge_client_demo.html в test.file.with.dots.html и получить следующий URL переписывания:

http://127.0.0.1:3030/lounge_client_demo/web/test/.file/.with/.dots/.html#lobby

Каротаж показывает, что каждый период в настоящее время «убежали» с помощью обратной косой черты:

2014-01-30 01:16:28.246: FINEST : go /lounge_client_demo/web/test\.file\.with\.dots\.html#lobby 

Возможно, blem с символом периода в маршрутной_иерархической упаковке ?!

ответ

1

Вы не должны быть в том числе и в пути маршрута #, так что просто 'lobby', не '#lobby' - маршрутизатор делает это для вас. Если вы хотите использовать фрагмент (#...) для маршрутизации, то вам необходимо включить его в вашем модуле:

module.value(NgRoutingUsePushState, NgRoutingUsePushState.value(false)); 

который сообщает маршрутизатору использовать window.location.hash вместо window.location.path для маршрутизации, а также слушать window.onHashChange вместо window.onPopState.

Это означает, что вы можете либо выполнить согласование траектории, либо совместить фрагмент, но не оба. Таким образом, вам также потребуется удалить маршрут «root» (для пути '/lounge_client_demo/web/lounge_client_demo.html'). Как только вы переключаетесь на путь сопоставления фрагментов, становится неуместным, только материал после # передается маршрутизатору.

Конфигурация маршрут должен выглядеть примерно так:

class AppRouteInitializer implements RouteInitializer { 

    init(Router router, ViewFactory view) { 
    router.root 
     ..addRoute(
      name: 'lobby', 
      path: 'lobby', 
      enter: view('views/LobbyView.html')) 
     ..addRoute(
      name: 'chat', 
      path: 'chat', 
      enter: view('views/ChatView.html')) 
     ..addRoute(
      name: 'default', 
      defaultRoute: true, 
      enter: (_) => router.go('lobby', {'param': ':param'})); 
    } 

} 
+0

К сожалению, это не помогло. Добавление * NgRoutingUsePushState (false) * не отображает вид, а defaultRoute не загружается.Удаление * # * просто удаляет # из результирующего URL-адреса. Я пробовал оба на Dart VM и V8. Я знаю, что вы больше всего знаете о пакете * route_hierarchical *, но я все еще очень подозрительно отношусь к записи журнала из метода go ;-) –

+0

А, да. Вам также необходимо удалить корневой маршрут. Вам это не нужно. – pavelgj

+0

Я имею в виду, вы можете либо выполнить согласование траектории, либо совместить фрагмент, но не оба. – pavelgj

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