首页 > 解决方案 > 如何使用字符串插值并从枚举中接收随机值?

问题描述

我要做的如下:我有一个包含一系列报价的组件。一个提议由几件事组成,但其中之一必须是一个状态,它必须是一个基于字符串的枚举。必须创建具有多个属性的随机值的报价,其中之一是报价作为枚举的状态。这可以是“NEW”、“FOR_SALE”、“SOLD”、“PAID”、“DELIVERED”、“CLOSED”、“EXPIRED”和“WITHDRAWN”。必须使用一种方法生成随机报价,该方法为所有内容创建具有随机属性以及来自枚举的随机状态的报价。

现在我已经尝试了很多东西,但我无法弄清楚如何在这种情况下使用枚举。枚举上的字符串插值似乎没有做任何事情或从枚举中取出任何值,我看不到如何在枚举上应用随机化,因为您似乎无法对枚举本身应用任何东西。

export class Overview1Component implements OnInit {
  private offers: Offer[];

export class Offer {
  public title: string;
  public sellDate: Date;
  public description: string;
  public auctionStatus: AuctionStatus;
  public numberOfBids: number;
  public valueHighestBid: number;
}

export enum AuctionStatus {
  NEW = 1,
  FOR_SALE = 2,
  SOLD = 3,
  PAID = 4,
  DELIVERED = 5,
  CLOSED = 6,
  EXPIRED = 7,
  WITHDRAWN = 8
}

我的枚举器方法本身是否存在缺陷?我如何从枚举中挑选出一个随机值并使用字符串插值在我的 HTML 中显示它?


一些进一步的信息:

随机报价是通过以下方法进行的:

 public addRandomOffer(): void {
    const newOffer = new Offer();
    newOffer.title = 'This great article offer-' + (this.offers.length);
    const fromDate = new Date(2005, 0, 1);
    const toDate = new Date(2020, 0, 1);
    newOffer.sellDate = this.getRandomDate(fromDate, toDate, 0, 23);
    newOffer.numberOfBids = Math.floor(Math.random() * 30 + 1);
    if (newOffer.numberOfBids === 0) {
      newOffer.valueHighestBid = 0;
    } else {
      newOffer.valueHighestBid = Math.floor(Math.random() * 200 + 1);
    }
    this.offers.push(newOffer);
  }

正如你所看到的,目前这里没有任何东西可以设置或随机化状态,因为我不知道如何用它做任何事情。

这样做是为了使随机报价可以显示在报价概览的组件上。

视图的图像

在用于打印优惠的 HTML 中,我目前有以下内容:

  <tr *ngFor="let offer of offers">
    <td>{{offer.title}}</td>
    <td>{{offer.sellDate}}</td>
    <td>{{offer.auctionStatus}}</td>
    <td>{{offer.numberOfBids}}</td>
    <td>€{{offer.valueHighestBid}}</td>
  </tr>

标签: angulartypescriptenumsstring-interpolation

解决方案


缩短版:

class Offer {
  constructor() {
    this.auctionStatus = Math.trunc(Math.random() * 8 + 1);
  }

}

const offer = new Offer();
console.log(offer.auctionStatus);

就这么简单。

虽然,既然你问了,我强烈建议使用枚举。他们在 JS 中没有自己的位置。所以只需使用一个对象。

(但这是个人喜好)。


推荐阅读