Состояние гонки с ng2-translate

Мой app.component выглядит так:

export class AppComponent {

    public constructor(public translate: TranslateService) {

        const userLang = navigator.language.split('-')[0];
        const acceptedUserLang = /(de|en)/gi.test(userLang) ? userLang : 'en';
        this.translate.setDefaultLang('en');
        this.translate.use(acceptedUserLang);
    }
}

Мой app.routing имеет следующее определение:

const appRoutes: Routes = [
    {path: 'signUpSuccess/:language', component: SignUpSuccessComponent},
];

И мой signUpSuccess.component:

export class SignUpSuccessComponent {

    public constructor(translate: TranslateService, route: ActivatedRoute) {
        translate.use(route.snapshot.params['language']);
    }
}

Когда я загружаю страницу с помощью /signUpSuccess/de, app.component устанавливает язык на en, ng2-translate начинает получать en.json с сервера, затем signUpSuccess.component устанавливает язык на de, ng2-translate начинает получать de.json с сервера. Если по какой-либо причине сейчас de.json выиграет гонку и прибудет к клиенту первым, то язык переключится на en, когда en.json прибудет к клиенту. Как я могу этого избежать?


person stofl    schedule 31.08.2016    source источник


Ответы (1)


См. этот демонстрационный планкер: https://plnkr.co/edit/dfhdAI1o6VhVHFcnKmWH?p=preview

Вы можете использовать эту функцию

switchMap()

С помощью этой функции предыдущие запросы будут отменены, если они все еще находятся на рассмотрении.

person slaesh    schedule 31.08.2016
comment
Спасибо за ваше время, чтобы написать код и помочь мне. Но ng2-translate — это угловой плагин. Я посмотрю их код. ... Я думал, что это моя вина. - person stofl; 31.08.2016