У меня есть приложение Angular (6.0.3), и я хочу использовать язык в качестве общего префикса для всех маршрутов, что-то вроде /en/foo/bar
. Мое определение маршрута src/app/submodule/submodule.routes.ts
выглядит так:
export const submoduleRoutes = [
{ path: ':lingua/foo/bar', component: FooBarComponent },
];
Мой корневой компонент src/app/app.component.ts
:
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Router, ActivatedRoute, Event, NavigationEnd } from '@angular/router';
import { filter } from 'rxjs/operators';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit, OnDestroy {
title = 'app';
private sub: any;
constructor(private router: Router, private route: ActivatedRoute) {
this.router.events.pipe(
filter((event:Event) => event instanceof NavigationEnd)
).subscribe(x => console.log(x));
};
ngOnInit() {
this.sub = this.route.params.subscribe(params => {
console.log(params);
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
}
Когда я перехожу на /xy/foo/bar
, FooBarComponent
обрабатывается. Но я не могу получить префикс языка в корневом компоненте. Хэш params
пуст.
Выход консоли сначала отображает {}
для пустых параметров, а затем событие NavigationEnd
.
Тот же код работает, как и ожидалось в FooBarComponent
. Очевидно, что корневой компонент - это неправильное место для получения параметров.
Моя цель - получить параметр lingua
для всех компонентов, чтобы я мог установить правильный язык. Я знаю, что я мог бы также сохранить язык в cookie или локальном хранилище, но мне нужны закладки для URL для многоязычного контента.
В случае, если это имеет значение, исходный код имеет значение https://github.com/gflohr/Lingua-Poly (commit 12608dc). Рассматриваемый маршрут определен в https://github.com/gflohr/Lingua-Poly/blob/master/src/app/main/main.routes.ts (в конце :lingua/mytest
.