0

我在 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 && idSecond && idFirst.frequency == idSecond.frequency;         
  }

问题是,当我选择第一个值时,它会保存在数据库中(spring boot),但只有当我返回页面时选择列表中的第一个值时,才会选择该值。如果您想从服务器中查看某些内容,请告诉我。谢谢!

4

2 回答 2

0

使 FrequencyUI 频率属性可选:频率?:频率

或添加频率枚举选项“无”:

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

请记住:问题可能在 compareWith 中

于 2021-09-18T06:32:29.580 回答
0

最常见的错误:当您的数据从服务器返回时,您应该在 Javascript 代码中显式转换您的枚举值:

fundDto.subscription_frequency = Frequency[fundDto.subscription_frequency]

我通常在可观察管道中执行此操作:

<observable_here>.pipe(
  tap(fundDto.subscription_frequency = Frequency[fundDto.subscription_frequency])
);
于 2021-09-18T06:09:58.117 回答