Ошибки AOT при передаче параметров в средство сравнения в Angular Router - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь использовать замыкание для передачи параметров сопоставителю маршрутизатора.

export function componentMatcher(component) {
    return (url) => {
       // check some condition using component
       return {
           consumed: url
       };
       return null;
    }
};

RouterModule.forChild([
    {
        matcher: componentMatcher('foo'),
        redirectTo: 'foo'

Сбой при компиляции в AOT с:

ERROR in Error during template compile of 'ComponentPageModule'
  Function expressions are not supported in decorators in 'ɵ0'
    'ɵ0' contains the error at src/app/example-components/component-page/component-page.module.ts(31,30)
      Consider changing the function expression into an exported function.

Без требования к параметру это довольно просто исправить:

export function componentMatcher(url) => {
    // check some condition using component
    return {
        consumed: url
    };
    return null;
 }

Как передатьпараметр и сделать это AOT-совместимым?

1 Ответ

0 голосов
/ 01 ноября 2019

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

RouterModule.forRoot([
  {
    matcher: (url) => {
      if (url.length === 1 && url[0].path.match(/^@[\w]+$/gm)) {
        return {
          consumed: url,
          posParams: {
            username: new UrlSegment(url[0].path.substr(1), {})
          }
        };
      }
      return null;
    },
    component: ProfileComponent
  }
])

В приведенном выше примере проверяется, чтобы увидетьчто в массиве только один сегмент, затем используется регулярное выражение, чтобы убедиться, что формат имени пользователя совпадает. Когда он совпадает, он возвращает весь использованный URL-адрес и определяет параметр маршрута username как подстроку пути. Если совпадений нет, возвращается null, и маршрутизатор продолжает искать другие маршруты, которые могут соответствовать URL. Это работает так же, как и другие маршруты, позволяет вам определять дочерние маршруты или даже лениво загруженные маршруты.

Пользовательский маршрут, совпадающий с угловым маршрутизатором

...