【问题标题】:Show selected item name instead of selected Id in Angular 11在Angular 11中显示选定的项目名称而不是选定的ID
【发布时间】:2021-10-16 22:51:36
【问题描述】:

当我从选择下拉列表中选择一个值时,我只能打印 ID,但我想显示 Description 而不是 Id。我只想显示名称,但我想将选定的值 Id 发送到 API。

Result

component.ts

pay = [];

paymentForm = new FormGroup({
   paymentType: new FormControl('', []),
   description: new FormControl('', []),
   amount: new FormControl('', []),
});

btnAddToPayment(payment: SalePayment) {
  this.cartService.addToPaymentCart(payment);
  this.pay.push(this.paymentForm.get('paymentType').value);
}

用于选择的 HTML

    <select formControlName="paymentType" class="mb-3 form-control" id="Payment">
          <option value="" disabled selected>Payment type</option>
          <option *ngFor="let pay of selectPayment" [value]="pay.Id">
            {{pay.Description}}
          </option>
     </select> 

btnAddToPayment 的 HTML

    <div class="input-group-prepend">
                    <span class="btn btn-default input-group-text" (click)="btnAddToPayment(paymentForm.value)">
                      <i class="fa fa-plus-square" style="color: green"></i>
                    </span>
          </div> 

表格

 <tr *ngFor="let paym of payment">
          <!--              <td>{{paym.paymentType.Description}}</td>-->
          <td>{{paym.paymentType}}</td>
          <td>{{paym.amount | currency:'RS: '}}</td>
          <td>{{currentDate | date:'yyyy-MM-dd'}}</td>
 </tr>

界面

export class SalePayment {
  SaleId: string;
  PaymentTypeId: number;
  Description: string;
  Amount: number;
  Balance: number;
}
  1. 我想将选定的值推送到数组并将它们保存到数据库。可能有多次付款。

【问题讨论】:

    标签: angular angular8 angular9 angular11


    【解决方案1】:

    根据您的选择下拉菜单,您将值字段设置为另存为付款类型

    • 这种做法是正确的

    这样使用来显示名称 |描述为 td 元素

    <td>
      <span *ngFor="let pay of selectPayment" [hidden]="pay?.Id !== paym?.paymentType" >
         {{pay?.name}}
      </span>
    </td>
    
    
    

    【讨论】:

    • 你能解释一下我需要把这段代码放在哪里吗?
    【解决方案2】:

    这样使用

     <tr *ngFor="let paym of payment">
              <!--<td>{{paym.paymentType.Description}}</td>-->
              <td>
                <span *ngFor="let pay of selectPayment" [hidden]="pay?.Id !== paym?.paymentType" >
                   {{pay?.name}}
                </span>
              </td>
              <td>{{paym.amount | currency:'RS: '}}</td>
              <td>{{currentDate | date:'yyyy-MM-dd'}}</td>
     </tr>
    
    
    

    【讨论】:

    • 它给了空白空间
    • selectPayment 数组中是否有 name 字段。否则Description 使用此字段 {{pay?.Description}}
    【解决方案3】:

    您可以使用 find 过滤出具有所需描述的对象。 像这样的东西(我假设您正在使用表单值填充支付数组。如果不是这样,请告诉我)

    btnAddToPayment(payment: SalePayment) {
      this.cartService.addToPaymentCart(payment);
       const selectedObj = selectPayment.find((item:any)=>{
          item.Id === payment.paymentType
       });
       if(selectedObj) {
         payment['paymentName'] = selectedObj.Description;
       }
      this.pay.push(this.paymentForm.get('paymentType').value);
    }
    

    在 HTML 中,

    <tr *ngFor="let paym of payment">
              <td>{{paym.paymentName}}</td>
              <td>{{paym.amount | currency:'RS: '}}</td>
              <td>{{currentDate | date:'yyyy-MM-dd'}}</td>
     </tr>
    

    【讨论】:

    • 是的,我正在尝试从表单数组中获取值。我尝试了您的建议,但在这一行中出现了以下错误。 item.Id === payment.paymentType 以下是错误“SalePayment”类型上不存在属性“paymentType”。您是说“PaymentTypeId”吗?
    • 可以分享一下SalePayment接口吗?我以为btnAddToPayment(payment: SalePayment) { 会有formValue,这就是为什么我在paymentForm 上使用paymentType
    • 我添加了我的界面。
    • 我很好奇的是 btnAddToPayment 接收表单值。所以它应该包含 paymentType。有没有其他方法可以将此 formValue 映射到 SalePayment?你能在 btnAddToPayment 中做一个 console.log(payment) 然后
    • 我尝试在这里解释stackblitz.com/edit/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2019-08-16
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多