在我的 Ionic 5 项目中,我遇到了以下问题:我认为我有一个铸造问题。在我看来,我只想在 selected-language 属性与语言本身不匹配时才显示语言标志图标。问题是,第一次启动应用程序时会显示所有三个图标!
我有以下看法:
<ion-toolbar color="secondary">
<div class="flags">
<ion-buttons slot="end" *ngIf="!loading">
<ion-button *ngIf="selectedLanguage != 'de'" fill="clear" color="dark"
class="ion-no-padding button-padding flag" (click)="changeLanguage('de')">
<ion-icon src="../../../assets/flag-icons/de.svg"></ion-icon>
</ion-button>
<ion-button *ngIf="selectedLanguage != 'en'" fill="clear" color="dark"
class="ion-no-padding button-padding flag" (click)="changeLanguage('en')">
<ion-icon src="../../../assets/flag-icons/en.svg"></ion-icon>
</ion-button>
<ion-button *ngIf="selectedLanguage != 'nl'" fill="clear" color="dark"
class="ion-no-padding button-padding flag" (click)="changeLanguage('nl')">
<ion-icon src="../../../assets/flag-icons/nl.svg"></ion-icon>
</ion-button>
</ion-buttons>
</div>
</ion-toolbar>
在设置服务中,我使用以下函数从本地存储中获取语言字符串:
async getSetting(type: string) {
let result;
try {
result = await this.storage.get('_setting_' + type);
} catch (error) {
console.warn(error);
}
return result;
}
在我看来,我想设置选定的语言:
export type AcceptedLanguage = 'de' | 'en' | 'nl';
在我的页面组件中,我声明并初始化 selectedLanguage 如下:
selectedLanguage: AcceptedLanguage = 'de';
ngOnInit 定义如下:
async ngOnInit() {
this._loading$ = this.loadingIndicationService.loading$.subscribe(
(loading) => {
console.log('loading subscribed in startscreen');
this.loading = loading;
}
);
this.selectedLanguage = await this.settingsService.getLanguage();
}
我已经通过在 lang 周围制作一个开关盒来修复它,如下所示:
async ngOnInit() {
this._loading$ = this.loadingIndicationService.loading$.subscribe(
(loading) => {
console.log('loading subscribed in startscreen');
this.loading = loading;
}
);
const lang = await this.settingsService.getLanguage();
switch (lang) {
case 'de':
this.selectedLanguage = 'de';
break;
case 'en':
this.selectedLanguage = 'en';
break;
case 'nl':
this.selectedLanguage = 'nl';
break;
default:
this.selectedLanguage = 'nl';
break;
}
}
但这不是一个好的解决方案!对此有什么好的解决方案?为什么我们会有这个问题?为什么开关盒能解决这个问题?
提前致谢!