Как передать событие от ребенка к родителю, используя ngx-translate - PullRequest
0 голосов
/ 05 октября 2018

Я использую ngx-translate для создания многоязычного веба на угловом языке.Я использую файлы JSON для языков и помещаю их в assets / i18n / en.json (для английского языка) и assets / i18n / ge.json для немецкого языка.Я реализовал событие EventEmit от потомка к родителю следующим образом:

child.component.ts:

private translateService: TranslateService;
@Output() showLanguage = new EventEmitter();

constructor(translateService: TranslateService) {
    this.translateService = translateService;
    this.translateService.setDefaultLang('en');
  }



 switchLanguage(language: string) {
    this.showLanguage.emit(this.translateService.use(language));
  }

Child.html

  <button (click)="switchLanguage('en')">en</button>
  <button (click)="switchLanguage('fr')">fr</button>

parent.component.ts

private translateService: TranslateService;
 constructor(translateService: TranslateService) {
    this.translateService = translateService;
  }
switchLanguage(language) {
    this.translateService.use(this.language);
 }

Parent.html

  <child-page (showLanguage)="switchLanguage($event)"><child-page>

App.module.ts

 export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http);
  }

  @NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })
  ],
  providers: [],
  bootstrap: [AppComponent]
})

Но когда я нажимаю кнопку угловой, выдается ошибка:

ERROR TypeError: Object(...) is not a function
    at TranslateService.use (ngx-translate-core.js:555)
    at ChildComponent.switchLanguage (childcomponent.component.ts:40)
    at Object.eval [as handleEvent] (ChildComponent.html:12)
    at handleEvent (core.js:13589)
    at callWithDebugContext (core.js:15098)
    at Object.debugHandleEvent [as handleEvent] (core.js:14685)
    at dispatchEvent (core.js:10004)
    at eval (core.js:10629)
    at HTMLButtonElement.eval (platform-browser.js:2628)
    at ZoneDelegate.invokeTask (zone.js:398)
    at Object.onInvokeTask (core.js:4751)
    at ZoneDelegate.invokeTask (zone.js:397)
    at Zone.runTask (zone.js:165)
    at HTMLButtonElement.ZoneTask.invoke (zone.js:460)

Пожалуйста, помогите мне.Спасибо

1 Ответ

0 голосов
/ 05 октября 2018

Вместо

switchLanguage(language: string) {
this.showLanguage.emit(this.translateService.use(language));
}

Попробуйте испустить только язык

switchLanguage(language: string) {
this.showLanguage.emit(language);
}
...