【问题标题】:Angular display ngFor value in another tagAngular 在另一个标签中显示 ngFor 值
【发布时间】:2018-12-26 17:12:06
【问题描述】:

我有这样显示的公司列表:

<div class="col-md-4">
            <select ngModel="selectedCompany" style="width:400px;">
               <option *ngFor="let x of mycompanylist"  value="{{x.id}}">{{x.name}}
               </option>
            </select>
            <input class="form-control" type="text" formControlName="CompanyID" value = "{{selectedCompany}}"> 
         </div>

我需要在输入标签中显示所选选项的值。我试图用 ngModel 来做,但它不起作用。

主要目的是将值传递给formControlName,以便在提交表单后我可以接收到值,但如果我这样做:

<option *ngFor="let x of mycompanylist"  value="{{x.id}}" fromControlName="ComapnyID">

选项不再显示

更新

我使用[(ngModel)] 修复了它并摆脱了formControlName

这里有一个Working Sample StackBlitz 供参考。

更新

表格:

<div class="col-md-4">
            <select class="form-control" [(ngModel)]="selectedCompany">
            <option *ngFor="let x of mycompanylist"  [value]="x.id">{{x.name}}
            </option>
          </select>
        </div>

      <form [formGroup]="invoiceForm" (ngSubmit)="save()" #formDir="ngForm" novalidate>  
      <div class="form-group row">
         <label class="control-label col-md-12" for="name">CompanyID</label>  

         <div class="col-md-4">
            <input class="form-control" type="text" formControlName="CompanyID" value ="{{selectedCompany}}">
         </div>

         <span class="text-danger" *ngIf="invoiceForm.hasError('required', 'CompanyID') && formDir.submitted">  
         CompanyID is required.  
         </span> 
      </div>
      <div class="form-group row">
         <label class=" control-label col-md-12" for="description">VendorID</label>  
         <div class="col-md-4"> <input class="form-control" type="text" formControlName="VendorID"> </div>
      </div>
      <div class="form-group"> <button type="submit" class="btn btn-default">Save</button> <button class="btn" (click)="cancel()">Cancel</button> </div>
      </form>  

错误:

【问题讨论】:

  • @SiddAjmera 感谢您的帮助,但有一个问题。输入字段只识别用户输入,我的意思是如果用户输入公司 2,然后在选项中选择公司 3,输入字段中显示公司 3,但输入的值仍然是公司 2。我该如何解决这个问题?跨度>
  • @SiddAjmera 我已经添加了完整的表格,也许它可以提供帮助

标签: javascript angular ngfor ngmodel


【解决方案1】:

一个快速的解决方案可能是共享相同的模型

<div class="col-md-4">
    <select [(ngModel)]="selectedCompany" style="width:400px;">
    <option *ngFor="let x of mycompanylist"  [value]="x.name">{{x.name}}
    </option>
  </select>
  <input class="form-control" type="text" [(ngModel)]="selectedCompany"> 
</div>

所以如果用户在字段中输入也会更新选择的模型。

另一种解决方案可能是使用 ngModelChange

<div class="col-md-4">
    <select [(ngModel)]="selectedCompany" style="width:400px;" (ngModelChange)="onSelectedCompany($event)">
    <option *ngFor="let x of mycompanylist"  [value]="x.name">{{x.name}}
    </option>
  </select>
  <input class="form-control" type="text" [(ngModel)]="company" readonly> 
</div>

app.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {

  selectedCompany: string = null;
  company: string = null;

  mycompanylist = [
    { id: 1, name: 'Company 1' },
    { id: 2, name: 'Company 2' },
    { id: 3, name: 'Company 3' },
    { id: 4, name: 'Company 4' }
  ];


  onSelectedCompany(company: string) {  
    this.company = company;
  }
}

重要的是要突出只读属性,这样用户就不能输入任何东西

【讨论】:

  • 如果我将输入字段禁用或只读,则 invoiceForm.value.CompanyID 的值保持为空,无论我们在输入中传递的值如何抛出 ngModel。输入仅显示值,因此我无法将其发送到我的 api。我添加了错误和完整形式
  • 你能把你的表格例子放在 plunker 里吗?
  • 我不熟悉这个,所以可能需要一些时间。
猜你喜欢
  • 2019-01-12
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 2018-05-16
  • 2022-10-05
  • 2023-03-23
相关资源
最近更新 更多