#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. Проблема должна быть в сравнении с наверняка, я добавлю этот код к вопросу, и, возможно, вы сможете внести свой вклад в ответ, добавив, что ничего не получится, потому что я не хочу ничего сохранять