我正在尝试在用户更改语言时动态更改Ionic 3菜单侧。对于RTL语言,菜单需要位于右侧,默认情况下设置为左侧。
我从@ngx-translate/core订阅TranslateService事件,当语言更改时,在app.components.ts中实现。
我从@ngx-translate/core订阅TranslateService事件,当语言更改时,在app.components.ts中实现。
this.translate.onLangChange.subscribe((event: LangChangeEvent) => {
console.info(`Language change to ${event.lang}`);
this.isRTL = event.lang == 'ar' || event.lang == 'fa';
if (event.lang == 'ar' || event.lang == 'fa') {
this.platform.setDir('rtl', true);
this.menuSide = 'right';
} else {
this.platform.setDir('ltr', true);
this.menuSide = 'left';
}
this.platform.setLang(event.lang, true);
});
当语言更改时,上述代码能够成功执行,并且所有变量都按预期设置(我编写了单元测试以确保和应用程序运行时进行了大量的console.logs)。
在模板中:
<ion-menu [content]="content" [side]="isRTL?'right':'left'" side="{{menuSide}}">
....
</ion-menu>
然而,即使在控制器中更改了this.menuSide
,它也不会按预期工作。
似乎只能在platform.ready()
之前更改侧边栏,一旦platform.ready()
完成,无论我设置什么都不会产生任何效果。
编辑:
我尝试使用https://dev59.com/5KXja4cB1Zd3GeqPRneO#46417869中的方法,但也没有解决问题。
如果我只是在模板中打印menuSide
,它将在屏幕上具有正确的值,但对菜单方向没有任何影响。
我可以通过浏览器元素检查器手动更改菜单元素上的“side”属性,并成功更改方向,但使用menuSide
变量无法完成该任务。
platform.ready()
之前初始化“menuSide”,它将起作用,但在此之后就不起作用了。完整的源代码可在https://github.com/SavandBros/gonevis-mobile/blob/master/src/app/app.html找到。 - Alireza Savand