Angular2 Routing: перенаправление в динамически генерируемую строку - PullRequest
0 голосов
/ 07 мая 2019

По умолчанию мне нужно перенаправить на сегодняшнюю дату.Вот конфигурация маршрутизации, которая у меня есть на данный момент:

import { CALENDAR_ROUTE } from './_methods/utils';

export const appRoutes: Routes = [
   {
    path: CalendarComponent.path, 
    component: CalendarComponent,
    canActivate: [AuthGuard],
    resolve: refDataResolver,
    data: {
      navi: {
        at: 'main',
        icon: 'navbar-calendar'
      },
      roles: {
        employeeOnly: true
      }
    },
    children: [
      {
        path: '',
        pathMatch: 'full',
        redirectTo: CALENDAR_ROUTE.DEFAULT_MONTH
      },
      {
        path: LAYOUT_MONTH,
        children: [
          {
            path: '',
            pathMatch: 'full',
            redirectTo: CALENDAR_ROUTE.MONTH
          },
          {
            path: ':year/:month',
            component: CalendarMonthViewComponent
          },
        ]
      },
      {
        path: LAYOUT_DAY,
        children: [
          {
            path: '',
            pathMatch: 'full',
            redirectTo: CALENDAR_ROUTE.DAY
          },
          {
            path: ':year/:month/:day',
            component: CalendarDayViewComponent
          },
        ]
      }
    ]
    }
  ];

Вот как я генерирую строки в utils.ts :

import { LAYOUT_MONTH } from './../_classes/const';
import * as moment from 'moment';

export function getRoute(withDay: boolean, prefix?: string): string {
    const now = moment();
    const day = ( withDay ) ? now.format('DD') : null;
    return [prefix, now.format('YYYY'), now.format('MM'), day]
        .filter( str => !!str)
        .join('/');
}

export const CALENDAR_ROUTE = {
    DEFAULT_MONTH: getRoute(false, LAYOUT_MONTH),
    MONTH: getRoute(false),
    DAY: getRoute(true)
};

Все идет хорошо- в режиме разработки и на локальном хосте - пока мне не нужно скомпилировать его для UAT / PROD, который использует сборки AOT, которые затем выдают

ERROR in Error during template compile of 'AppRoutingModule' 
Function calls are not supported in decorators but 'getRoute' was called in 'appRoutes' 
'appRoutes' calls 'getRoute' at app/app-routing.module.ts(67,42).

Я еще не нашел решения этой проблемы.Есть некоторые проблемы, которые могут использовать providers и useValue - но это похоже на излишество прямо здесь.Может быть, есть другой вид обходного пути?Может быть, я должен по-своему структурировать свои компонентыЕсть идеи?

1 Ответ

0 голосов
/ 07 мая 2019

Одним из решений может быть внедрение Router в ваш компонент, а затем обновление конфигурации маршрута во время выполнения.

Я сам не проверял это, но идея была бы примерно такой:

В вашем компоненте

constructor(private router: Router) {
   this.router.config.unshift({path: '', component: '', redirectTo: 'Your new redirect path'})
}
...