Значок углового динамического флага в диапазоне на основе изменения выбора мата

У меня есть mat-select, и я хотел бы изменить значок флага в промежутке в mat-label в зависимости от выбранной опции.

Отображается начальный флаг, после щелчка в диапазоне не происходит никаких изменений.

Флаги в списке опций работают правильно, поэтому вопрос касается только метки.

Я пробую что-то вроде:

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}`;
    }

Я также пробовал геттер / сеттер, но сеттер, похоже, не работал при использовании mat-select.

Заранее спасибо за помощь!

2 ответа

Я протестировал его, и ваш код работает. Вам просто нужно проверить правильность двухбуквенного кода страны.

Я не знаю, правильно ли вы его скопировали, но вам не хватает закрытия <mat-form-field> тег в вашем HTML, так что проверьте и это.

Рабочий пример

Окончательное решение, основанное на помощи Nenad: (флаг перед опцией, без метки над полем выбора)

      <mat-form-field>
<span [class]="getLanguageFlag(selectedLanguage)"></span>
&nbsp;
<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>
Другие вопросы по тегам