【发布时间】:2018-04-10 08:50:33
【问题描述】:
我正在实现一个显示复选框的语言切换组件,应用程序的每种语言一个复选框(翻译为@ngx-translate)。
点击其中一个复选框时,应用语言会正确切换,但点击的 mat-checkbox 仍未选中。
模板:
<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(默认值)。现在,当我点击德语或英语时,语言确实会切换,法语复选框会正确取消选中,但是单击的复选框不会选中。
我遗漏了一些东西,可能是一个小细节,但我不明白为什么德语/英语不检查而法语正确地取消检查。
查看this simple stackblitz code 以重现我的情况。
【问题讨论】:
-
为什么不使用 ngModel 而不是检查?
-
ngModel应该映射到我没有的布尔值。我有一个language字段,它可以采用多个字符串值。此外,由于应用程序参数,语言的数量可能会增加(在我的真实代码中,复选框是使用*ngFor指令呈现的)。 -
使用单选按钮,这将允许您将语言属性绑定为 ngModel。
标签: angular angular-material angular-material2