У меня есть многоязычный сайт, который использует раскрывающийся список, позволяющий пользователю менять язык между английским и немецким.
Это компонент нижнего колонтитула в моем приложении, и при изменении выбора приложение запускает функцию changeLanguage ():
constructor(
private pageService: PageService,
private router: Router,
private el: ElementRef,
private cd: ChangeDetectorRef,
private meta: Meta,
private route: ActivatedRoute
) { }
ngOnInit(): void {
var nativeElement: HTMLElement = this.el.nativeElement,
parentElement: HTMLElement = <HTMLElement>nativeElement.parentElement;
// move all children out of the element
while (nativeElement.firstChild) {
parentElement.insertBefore(nativeElement.firstChild, nativeElement);
}
// remove the empty element(the host)
parentElement.removeChild(nativeElement);
this.routerSub$ = this.router.events.subscribe(event => {
if (event != null) {
if (event instanceof NavigationEnd) {
this.languageCode = SiteContext.getLanguageCode(event.urlAfterRedirects);
if (this.languageCode == "en" && this.selectedLanguage.name == 'Deutsch') { this.selectedLanguage = this.languages[1]; }
}
}
});
}
ngAfterViewInit() {
}
ngOnDestroy() {
if (this.routerSub$ != null) this.routerSub$.unsubscribe();
this.subscriptions.forEach((subscription: Subscription) => { subscription.unsubscribe(); });
this.subscriptions = [];
}
changeLanguage(lang) {
let langCode: string = (lang.name == 'Deutsch' ? "de" : "en");
this.router.navigate([langCode, 'home']);
}
Так что это должно перенаправить либо на «/ de / home», либо на «/ en / home /», а остальная часть приложения выбирает выбор языка и соответственно загружает контент.
При первом изменении параметров языка это работает отлично, обновляя URL и загружая новый контент. Когда опция снова меняется, ничего не происходит. Функция changeLanguage () запускается, но больше ничего.
Кажется, что это постоянно с другими проблемами SO, связанными с отсоединением и повторным использованием маршрутов в сборке Angular (это v5 между прочим). Однако я не пробовал ничего подобного из других подобных вопросов, чтобы решить проблему.
Я сосредоточился на этом вопросе / ответе безуспешно - Как реализовать RouteReuseStrategy shouldDetach для конкретных маршрутов в Angular 2 . Я также в настоящее время реализую класс CustomReuseStrategy из этого ответа.
Для получения дополнительной информации:
app.routing.ts:
const appRoutes: Routes = [
//{ path: '', redirectTo: '/de/home', pathMatch: 'full' },
{ path: 'de/v2-home', component: HomeComponent, data: { animation: 'de/v2-home' } },
{ path: '', redirectTo: '/de/v2-home', pathMatch: 'full' },
{ path: ':lang/v2-home', component: HomeComponent, data: { animation: ':lang/v2-home' } },
];
app.module.ts:
import { RouteReuseStrategy } from "@angular/router";
@NgModule({
[...],
providers: [
{provide: RouteReuseStrategy, useClass: CustomReuseStrategy}
]
)}
export class AppModule {
}
Просто не уверен, что я что-то упустил в моей реализации с навигацией здесь?
Спасибо.