Как сделать вызов API в функции сопоставления маршрута Angular 7 - PullRequest
0 голосов
/ 10 мая 2019

У меня есть функция сопоставления маршрутов в Angular 7, мне нужно выполнить вызов API, чтобы получить массив и проверить, содержит ли этот массив URL-адрес

Что я пробовал: Я вызвал API на APP_INITIALIZERи сохранил его в localStorage, проблема в том, что у меня есть Angular Universal, у которого нет localStorage, и я не могу внедрить любой сервис в функцию, которая находится вне класса машинописи, чтобы использовать сервис CookieService или HttpClient.Пробовал с Angular guard, но не знаю, как перейти к следующему объекту в массиве конфигурации маршрутов, в случае, если URL не найден в массиве категорий.

Что у меня сейчас:

export function DealsMatcher(url: UrlSegment[]): UrlMatchResult {

    if (url.length === 0) {
        return null;
    }
    let categories: HeaderCategoriesModel[];
    // TODO: need to get categories from API
    const param = url[0].toString();
    const index = categories.findIndex(category => {
        return category.title_translit === param;
    });

    if (index !== -1) {
        return ({consumed: url, posParams: {slug: url[0]}});
    }

    return null;

}

const routes: Routes = [
    {
        path: ':slug',
        matcher: DealsMatcher,
        component: DealsComponent,
    },
    {
        path: ':slug',
        matcher: DealsDetailMatcher,
        component: DealsDetailComponent,
        resolve: {
            deal: DealsDetailResolve
        }
    }
]

Я ожидал как-то внедрить сервис в функцию DealsMatcher или сделать ajax-запрос без внедрения.Также перейдите к следующей проверке маршрута, если используете угловой щит.

1 Ответ

0 голосов
/ 22 июля 2019

При запуске приложения я меняю значение переменной в среде и использую эту переменную в функции matcher.

Я никогда не использовал универсальный угол, я не знаю, возникнет ли у него какая-либо проблема с этим

export function linuxMatcher(url: UrlSegment[]) {
  if (environment.linux) {
    return url.length === 1 && url[0].path.endsWith('firewall') ? { consumed: url } : null;
  }
  return null;
}
...