Angular 基于 mat-select 更改的 span 中的动态标志图标
Angular dynamic flag icon in span based on mat-select change
我有一个 mat-select,我想 根据 select 在 mat-label 的范围内更改标志图标]ed选项。
显示初始标志,单击后跨度没有变化。
选项列表中的标志工作正常,所以问题只涉及 标签。
我正在尝试类似的东西:
HTML:
<mat-form-field>
<mat-label>
<span [class]="getLanguageFlag(selectedLanguage)"></span>
{{ selectedLanguage }}
</mat-label>
<mat-select
[(ngModel)]="selectedLanguage"
name="selectedLanguage"
id="selectedLanguage"
>
<mat-option
*ngFor="let language of languages"
[value]="language"
(click)="changeLanguage(language)"
>
<span [class]="getLanguageFlag(language)"></span>
{{ language }}
</mat-option>
</mat-select>
</mat-form-field>
TS:
selectedLanguage: string = environment.defaultLanguage;
constructor(
private store: Store<State>,
private translateService: TranslateService) {}
changeLanguage(language: string): void {
this.selectedLanguage = language;
}
getLanguageFlag(language: string): string {
let style = 'flag-icon flag-icon-';
return language === 'en' ? `${style}gb` : `${style}${language}`;
}
我也试过 getter/setter,但是 setter 在使用 mat-select.
时似乎不起作用
在此先感谢您的帮助!
我测试了它,你的代码有效。您应该只检查 2 个字母的国家/地区代码是否正确。
我不知道你是否只是没有正确复制它,但你在 HTML 中缺少关闭 <mat-form-field>
标记,所以也检查一下。
最终解决方案,基于 Nenad 的帮助:
(选项前的标志,select输入上方没有标签)
<mat-form-field>
<span [class]="getLanguageFlag(selectedLanguage)"></span>
<mat-select
[(ngModel)]="selectedLanguage"
name="selectedLanguage"
id="selectedLanguage"
>
<mat-option
*ngFor="let language of languages"
[value]="language"
(click)="changeLanguage(language)"
>
<span [class]="getLanguageFlag(language)"></span>
{{ language.toUpperCase() }}
</mat-option>
</mat-select>
</mat-form-field>
我有一个 mat-select,我想 根据 select 在 mat-label 的范围内更改标志图标]ed选项。
显示初始标志,单击后跨度没有变化。
选项列表中的标志工作正常,所以问题只涉及 标签。
我正在尝试类似的东西:
HTML:
<mat-form-field>
<mat-label>
<span [class]="getLanguageFlag(selectedLanguage)"></span>
{{ selectedLanguage }}
</mat-label>
<mat-select
[(ngModel)]="selectedLanguage"
name="selectedLanguage"
id="selectedLanguage"
>
<mat-option
*ngFor="let language of languages"
[value]="language"
(click)="changeLanguage(language)"
>
<span [class]="getLanguageFlag(language)"></span>
{{ language }}
</mat-option>
</mat-select>
</mat-form-field>
TS:
selectedLanguage: string = environment.defaultLanguage;
constructor(
private store: Store<State>,
private translateService: TranslateService) {}
changeLanguage(language: string): void {
this.selectedLanguage = language;
}
getLanguageFlag(language: string): string {
let style = 'flag-icon flag-icon-';
return language === 'en' ? `${style}gb` : `${style}${language}`;
}
我也试过 getter/setter,但是 setter 在使用 mat-select.
时似乎不起作用在此先感谢您的帮助!
我测试了它,你的代码有效。您应该只检查 2 个字母的国家/地区代码是否正确。
我不知道你是否只是没有正确复制它,但你在 HTML 中缺少关闭 <mat-form-field>
标记,所以也检查一下。
最终解决方案,基于 Nenad 的帮助: (选项前的标志,select输入上方没有标签)
<mat-form-field>
<span [class]="getLanguageFlag(selectedLanguage)"></span>
<mat-select
[(ngModel)]="selectedLanguage"
name="selectedLanguage"
id="selectedLanguage"
>
<mat-option
*ngFor="let language of languages"
[value]="language"
(click)="changeLanguage(language)"
>
<span [class]="getLanguageFlag(language)"></span>
{{ language.toUpperCase() }}
</mat-option>
</mat-select>
</mat-form-field>