Как я могу поддерживать RouteParams при перезагрузке страницы с помощью Angular 2 Dart?

Я использую Router и RouteParams в Angular 2 Dart.

Мои маршруты следующие:

@RouteConfig(const [
  const Route(path: '/', component: ViewLanding, as: 'home'),
  const Route(path: '/landing', component: ViewLanding, as: 'landing'),
  const Route(path: '/flights', component: ViewFlights, as: 'flights'),
  const Route(path: '/picker/:cityDepart/:cityArrival/:dateDepart/:dateArrival/', component: ViewFlights, as: 'picker'),
  const Route(path: '/order/:id/:level/:dateDepart/:dateArrival/', component: ViewOrder, as: 'order'),
  const Route(path: '/order/complete', component: ViewComplete, as: 'orderComplete')
])

//Точка входа в приложение:

void main() {
  print('-- Main.dart 2 --');
  bootstrap(Tickets, [
    routerInjectables,
    client_classes,
    // The base path of your application
    bind(APP_BASE_HREF).toValue('/'),
    // uncomment this if you want to use '#' in your url
    bind(LocationStrategy).toClass(HashLocationStrategy)
  ]);
}

Это отлично работает с маршрутизатором-выходом/маршрутизатором-link/router.navigate

Однако на перезагрузке страницы я не получаю положительного соответствия для маршрутов с параметрами. IE: если я обновляю http://localhost:8080/#/picker/SAN/SFO/2015-01-01/2015-04-02 - я перехожу к родительскому виду без дочерних маршрутов. Этот симптом верен для любого маршрута с параметрами.

Навигация непосредственно или обновляется до: http://localhost:8080/#/flights/ - работает как ожидалось - компонент ViewFlights создается

Симптомы: маршрутизация с параметрами не выполняется.

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

Ссылки: https://github.com/rightisleft/web_apps_dart/blob/angular2/web/main.dart https://github.com/rightisleft/web_apps_dart/blob/angular2/lib/client/tickets.dart

Ответ 1

Если я правильно понял ваш вопрос, вам нужно подписаться на события маршрутизатора в своем компоненте, чтобы обновить старые параметры с новыми, а затем обновить свой пользовательский интерфейс.

Я предполагаю, что ваша проблема заключается в том, что вы открываете url http://localhost:8080/#/picker/SAN/SFO/2015-01-01/2015-04-02, а затем переходите к http://localhost:8080/#/picker/SAN/SFO. Что вы делаете, это изменение маршрута, но компонент уже создан, что означает, что новый параметр не будет обновлен (или удален). Обычно я делаю следующее в вашем родительском компоненте

Angular 5

constructor(private router:Router){
 // Subscribe to the router events. 
 // It may be a good idea to assign this subscription to a variable, and then do an unsubscribe in your ngOnDestroy().
 this.router.events.subscribe(event=>{ 
  if(event instanceof ActivationEnd){
   var cityDepart = event.snapshot.params["cityDepart"];
   var cityArrival = event.snapshot.params["cityArrival"];
   var dateDepart = event.snapshot.params["dateDepart"]; 
   var dateArrival = event.snapshot.params["dateArrival"];
   // do some logic
  }
 });
}