Ошибка во время компиляции шаблона 'AppRoutingModule' Функциональные выражения не поддерживаются в декораторах - PullRequest
1 голос
/ 29 января 2020

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

"ссылки '' urlMatch '' CaseInsensitiveMatcher '' CaseInsensitiveMatcher 'содержит ошибку в src \ app \ provider \ caseInsensitiveMatcher .ts (4,10) Рассмотрите возможность изменения выражения функции в экспортированную функцию "

Пример кода из модуля маршрутизации приложений

    export function urlMatch(str: string) {
    return CaseInsensitiveMatcher(str).apply(this, arguments);
}

const routes: Routes = [

    { matcher: urlMatch('en-ie'), component: HomepageComponent },
    { matcher: urlMatch('en-gb'), component: HomepageComponent },
]

@NgModule({
    imports: [RouterModule.forRoot(routes),SharedModule, AccountModule],
    exports: [RouterModule, SharedModule, AccountModule]
})
export class AppRoutingModule { }

CaseInsensitveMatcher Code

import {Route, UrlSegment, UrlSegmentGroup} from '@angular/router';

export function CaseInsensitiveMatcher(url: string) {
  return function(
    segments: UrlSegment[],
    segmentGroup: UrlSegmentGroup,
    route: Route
  ) {
    const matchSegments = url.split('/');
    if (
      matchSegments.length > segments.length ||
      (matchSegments.length !== segments.length && route.pathMatch === 'full')
    ) {
      return null;
    }

    const consumed: UrlSegment[] = [];
    const posParams: {[name: string]: UrlSegment} = {};
    for (let index = 0; index < matchSegments.length; ++index) {
      const segment = segments[index].toString().toLowerCase();
      const matchSegment = matchSegments[index];

      if (matchSegment.startsWith(':')) {
        posParams[matchSegment.slice(1)] = segments[index];
        consumed.push(segments[index]);
      } else if (segment.toLowerCase() === matchSegment.toLowerCase()) {
        consumed.push(segments[index]);
      } else {
        return null;
      }
    }

    return { consumed, posParams };
  };
}

Буду очень признателен, если кто-нибудь скажет мне, что я делаю не так с этим? или даже как это решить. В любом случае, спасибо, что поблагодарили за время прочитать

Ссылка на оригинал для контекста

1 Ответ

1 голос
/ 29 января 2020

CaseInsensitveMatcher возвращает анонимную функцию, но, к сожалению, Angular не разрешает динамический c код, подобный этому, в AOT. Что вы можете сделать, так это переделать ваше решение, чтобы использовать только именованные экспортированные функции без привлечения анонимных.

...