Не удается выбрать первое значение в списке в приложении angular 9?

#angular

Вопрос:

У меня есть следующее перечисление и объект в приложении angular 9:

 export enum Frequency {
    Q='Quarterly',
    M='Monthly'
}

export class FrequencyUI {
  public frequency: Frequency;
  public name: string;

  constructor(frequency: Frequency, name: string) {
    this.frequency = frequency;
    this.name = name;
  }
}
 

Вот сущность:

 export class Fund {
public subscription_frequency?: Frequency;
}
 

Я использую значения перечисления в выборе следующим образом:

 <select [(ngModel)]="fund.subscription_frequency" #subscriptionFrequency="ngModel" name="subscription_frequency" [compareWith]="compareSubscriptionFrequenciesByOptionId" required>                                       
        <option [ngValue]="null">{{defaultSelect}}</option>
        <option *ngFor="let sf of frequencies" [ngValue]="sf.frequency">{{sf.name}}</option>
</select>
 

Это метод сравнения, я считаю, что проблема здесь в том, что нулевое значение сравнивается с другим, вопрос в том, что мне нужно изменить в этом методе
, чтобы все работало.

 compareSubscriptionFrequenciesByOptionId(idFirst, idSecond) {      
    return idFirst amp;amp; idSecond amp;amp; idFirst.frequency == idSecond.frequency;         
  }
 

Проблема в том, что когда я выбираю первое значение, оно сохраняется в базе данных (весенняя загрузка), но
ТОЛЬКО когда я выбираю первое значение в списке, когда я возвращаюсь на страницу, значение не выбрано.
Пожалуйста, дайте мне знать, если вы хотите увидеть что-то с сервера.
Спасибо!

Комментарии:

1. Пожалуйста, добавьте воспроизводимый пример. Код, который вы вставили, явно неполон. Вы заполняете ngModel из fund.subscription_frequency , и fund нигде не видно в компоненте.

2. Я добавлю объект, в котором есть частота, без проблем

Ответ №1:

Наиболее распространенная ошибка: когда ваши данные возвращаются с сервера, вы должны явно указать значение перечисления в коде Javascript:

 fundDto.subscription_frequency = Frequency[fundDto.subscription_frequency]
 

Обычно я делаю это в наблюдаемой трубе:

 <observable_here>.pipe(
  tap(fundDto.subscription_frequency = Frequency[fundDto.subscription_frequency])
);
 

Комментарии:

1. Тип был в вопросе, потому что я удалил класс css, можете ли вы удалить ответ, спасибо

2. ОК. Удалено. вы пробовали использовать перечисление?

3. Я только что выполнил ваш первый код, и теперь я не могу выбрать какое-либо значение, я напоминаю вам, что все работает нормально, только первое значение!

Ответ №2:

Сделайте свойство частоты FrequencyUI необязательным: частота?: Частота

Или добавьте опцию перечисления частот «нет»:

 enum Frequency{
  None = 'none'
  ...
}
 

Имейте в виду: проблема может заключаться в сравнении с

Комментарии:

1. Проблема должна быть в сравнении с наверняка, я добавлю этот код к вопросу, и, возможно, вы сможете внести свой вклад в ответ, добавив, что ничего не получится, потому что я не хочу ничего сохранять