我正在实现一个语言切换组件,它显示复选框,一个用于应用程序的每种语言(使用 @ngx-translate
进行翻译) .
单击其中一个复选框后,应用程序语言已正确切换,但单击的mat复选框仍未选中 .
模板:
<mat-checkbox [checked]="selectedLanguage == 'en'" (click)="switchLanguage('en')">English</mat-checkbox>
<mat-checkbox [checked]="selectedLanguage == 'fr'" (click)="switchLanguage('fr')">French</mat-checkbox>
<mat-checkbox [checked]="selectedLanguage == 'de'" (click)="switchLanguage('de')">German</mat-checkbox>
零件 :
export class CheckboxOverviewExample {
public selectedLanguage: string;
constructor(){
this.selectedLanguage = 'fr';
}
public switchLanguage(lang: string) {
this.selectedLanguage = lang;
// this.translateService.use(lang); // changing ngx-translate language
console.log('Switched to ' + lang);
}
}
当您路由到组件时, [checked]
绑定正在工作 . 登陆到组件时确实检查了 mat-checkbox
for french(默认值) . 现在,当我点击德语或英语时,语言会切换,法语复选框会正确取消选中,但点击的复选框不会检查 .
我错过了一些东西,可能是一个小细节,但我不明白为什么德语/英语不检查,而法语正确取消选中 .
看看this simple stackblitz code重现我的情况 .
2 回答
所以我有一个答案给你 . 不需要使用单选按钮,因为您的设计师讨厌它只是使用
使用
selectedLanguage === 'en'
检查类型和值另外,使用
(change)="switchLanguage('de')
而不是点击工作here或检查this
您应该使用 (change) 而不是 (click) . 您的模板应更改为:
...而你的功能将如下所示:
记得导入 MatCheckboxChange
链接到Demo .
您应该使用radio buttons来表示此行为 . 当您只需要选择一个选项时,复选框不是正确的方法 .
这是StackBlitz Demo .