使用ng2-translate的竞争条件

时间:2016-08-31 06:17:56

标签: angular race-condition 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将语言设置为enng2-translate开始从服务器获取en.json,然后{ {1}}将语言设置为signUpSuccess.componentde开始从服务器获取ng2-translate。如果由于任何原因现在de.json赢得比赛并首先到达客户端,那么当de.json到达客户端时,语言将切换到en。我怎么能避免这个?

1 个答案:

答案 0 :(得分:0)

请参阅此演示plunker:https://plnkr.co/edit/dfhdAI1o6VhVHFcnKmWH?p=preview

您可以使用此功能

switchMap()

使用此功能,前一个请求将被取消,如果它们仍处于未决状态。