我试图做一个投资组合,当有人想改变语言在菜单中的组件改变什么json加载获取所有数据。我试图使用行为主题和主题,但我不能理解他们,所以很难使用他们。对不起,在英语我学习的任何错误
这是我的服务
export class PortfolioService {
language: string = 'espaniol';
constructor(private http: HttpClient) {}
obtenerDatos(): Observable<any> {
if (this.language === 'espaniol') {
return this.http.get('./assets/i18n/espaniol.json');
} else {
return this.http.get('./assets/i18n/english.json');
}
}
changeLang(value: string) {
this.language = value;
}
}
这是我的标题
export class HeaderComponent {
@Input() currentSection = 'section1';
siteLanguage = 'english';
languageList = [
{ code: 'english', label: 'English' },
{ code: 'espaniol', label: 'Español' },
];
constructor(private portfolioService: PortfolioService) {}
changeLang(localeCode: string) {
this.portfolioService.changeLang(localeCode);
}
scrollTo(section: string) {
document.querySelector('#' + section)!.scrollIntoView();
}
}
我的模板
<ng-container *ngFor="let language of languageList">
<li role="menuitem">
<a class="dropdown-item" (click)="changeLang(language.code)">
{{ language.label }}
</a>
</li>
</ng-container>
和加载数据的组件
export class HomeComponent {
constructor(private datosPortfolio: PortfolioService) {}
miPortfolio: any;
ngOnInit(): void {
this.datosPortfolio.obtenerDatos().subscribe((data) => {
this.miPortfolio = data;
});
}
}
我试着做一个文件夹,在那里我可以用一个服务来改变语言,当标题中发生改变时,这个服务会被拾取。改变被拾取,但是语言在其他组件中没有改变。
1条答案
按热度按时间hmtdttj41#
你需要 Package 你的数据源observable with observable that changes when language changes.为此,最好是使用
BehaviorSubject
.看看这个:这样,每次语言改变时,新的源在this.language BehaviorSubject中发出,并且订阅函数由于新值而再次激发,并且它们切换到其他可观察对象,该可观察对象使得HTTP请求以语言作为进入请求的URL的参数。
希望对你有帮助:)