2017-05-02 26 views
1

我有一個路由到的組件,因此它沒有父/子。我通過TranslateService更改語言,這是我的app.component的調用,這是我的應用程序的基礎。我調用服務從後端獲取HTML文件,但是當我更改語言時,我想要進行新的調用以使用另一種語言獲取文檔。語言更改時會執行新的服務調用

我無法使用ngOnchanges,因爲沒有@Input(),我無法更改後端,因爲它來自舊應用程序,而後者已被另一個應用程序使用。

app.component.ts

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['app.component.scss'] 
}) 
export class AppComponent { 
    constructor(private translateService: TranslateService) { 
    } 

    public changeLanguage(language) { 
     this.translateService.use(language); 
     this.translateService.setDefaultLang(language); 
    } 
} 

免責聲明

@Component({ 
    selector: 'app-disclaimer', 
    templateUrl: 'vastgeklikteRechten.component.html', 
    styleUrls: ['vastgeklikteRechten.component.scss'] 
}) 

export class VastgeklikteRechtenComponent { 
    @ViewChild('dataContainer') dataContainer: ElementRef; 

    text = ''; 

    constructor(
     private translateService: TranslateService, 
     private vastgeklikteRechtenService: VastgeklikteRechtenService 
    ) { 
     this.vastgeklikteRechtenService.getVastgeklikteRechten(
     this.getLanguage()).subscribe(text => { 
      this.text = text; 
      this.loadData(text); 
     }); 
    } 

    loadData(data) { 
     this.dataContainer.nativeElement.innerHTML = data; 
    } 

    getLanguage() { 
     return this.translateService.getDefaultLang(); 
    } 
} 

回答

1

改變在我的聲明我的構造函數。我還需要在原來的呼叫從我的服務中獲得的HTML文件,這裏的構造函數:

constructor(private location: Location, 
      private translateService: TranslateService, 
      private vastgeklikteRechtenService: VastgeklikteRechtenService) { 
this.vastgeklikteRechtenService.getVastgeklikteRechten(this.getLanguage()).subscribe(text => { 
    this.text = text; 
    this.loadData(text); 
}); 
this.onLanguageChanged(); 
} 

,我添加了一個名爲onLanguageChanged(),我對我的TranslationService發現eventEmitter訂閱方法。所以現在當'onLangChange'事件發生時,我會做一個新的電話。

onLanguageChanged() { 
this.translateService.onLangChange.subscribe((event: LangChangeEvent) => { 
    this.vastgeklikteRechtenService.getVastgeklikteRechten(
    event.lang).subscribe(text => { 
    this.text = text; 
    this.loadData(text); 
    }); 
}); 
}