Чтение параметров маршрута?

Я новичок в Angular. Вот так:

const routes: Routes = [
  { path: '', redirectTo: '/ru/courses/categories', pathMatch: 'full' },
  { path: ':l/courses/categories', component: CourseCategoriesListComponent }
];

Затем я получил что-то инъекционное, что-то, что отвечает за правильный перевод:

@Injectable()
export class LanguageService {
  constructor(public activatedRoute: ActivatedRoute) { }

  private readonly map: { [languageCode: string]: (() => TranslatorBase) } = {
    ru: () => new RussianTranslagor()
  };

  getTranslatorForCurrentLanguage(callback: (translatorBase: TranslatorBase) => void): void {
    this.activatedRoute.queryParams.subscribe(
      params => {
        console.log(params);
        // HERE IS THE PROBLEM!!!
        const lang = params['l'];
        if (lang) {
          callback(this.map[lang]());
        }
      }
    );
  }
}

Когда я запускаю свой сервер и добираюсь до localhost:xxxxx, queryParams возвращает пустой объект params, например Я не могу прочитать фактическое значение параметра маршрута :l. Я что-то не так делаю?

ОБНОВИТЬ: Я пытаюсь прочитать параметр :l, что означает «язык». ;)

2
0
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема здесь в том, что вы используете queryParams вместо params. queryParams представляет параметры строки запроса, но ваш параметр l является обычным параметром и поэтому должен быть получен через params (или paramMap).

К сожалению, вы ошибаетесь. Ни params, ни queryParams не доставляют никакой ценности ...

Sereja Bogolubov 13.09.2018 21:44

Это странно - я только что протестировал ваш сценарий на Stackblitz, и он сработал, когда я переключился с queryParams на просто params.

serpent5 13.09.2018 21:45

Может быть, мне нужно установить RouterOutlet или что-то еще в нужном месте? Могут быть проблемы с масштабом?

Sereja Bogolubov 13.09.2018 21:45

Выполнено. Спасибо за решение. Я не указывал router-outlet и поэтому если продолжал выходить из строя.

Sereja Bogolubov 13.09.2018 21:56

Другие вопросы по теме