【问题标题】:Dynamic generation of input fields based on other input field value根据其他输入字段值动态生成输入字段
【发布时间】:2019-06-27 10:13:33
【问题描述】:

我正在尝试开发一项功能,其中生成的输入字段的数量由我在其他输入字段中输入的数字决定。 例如:如果我在“数量”表单字段中输入 4,则 serialNumbers 的 4 个输入字段应在下面生成为列表。

我的 HTML 代码:

<mat-form-field>
  <input matInput type="number" formControlName="quantity" placeholder="Enter Quantity" (change)="somethingChanged()" />
</mat-form-field>
<div>
  <ul>
    <li *ngFor="let item of quantity">
      <mat-form-field>
        <input matInput type="number" formControlName="serialNumber" placeholder="Enter Serial Number" />
      </mat-form-field>
    </li>
  </ul>
</div> 

我的组件代码:

somethingChanged() {
    let quantity = 0;
    quantity = parseInt(this.form.get('quantity').toString());
    let i = 0;
    while(quantity > 0) {
        this.serialNumber.push();
        i++;
    }
}

由于我是 Angular 的初学者,我不知道如何在不使用插值的情况下捕获 onChange 事件。请建议我一个解决方案。谢谢。

【问题讨论】:

标签: angular typescript angular-reactive-forms


【解决方案1】:

试试这个简单的例子

quantity: any;
       somethingChanged() {
        console.log(this.quantity)
      }

      counter(i: number) {
        return new Array(i);
    }

html

 <input  type="number" [(ngModel)]="quantity" placeholder="Enter Quantity" (change)="somethingChanged()"/> 
 <div>
      <ul>
          <li *ngFor="let item of counter(quantity)">
                  <input  type="number" placeholder="Enter Serial Number"/> 
          </li>       
      </ul>
  </div>

【讨论】:

  • 我尝试为 serialNumbers 生成的输入字段应该显示为列表,并且数量只是一个数字,而不是 json 对象。如果我输入 2,应该在数量输入下方生成两个输入字段。 @ORBIT
  • 它会生成你想要的东西,检查一下
【解决方案2】:

虽然您的问题不清楚,但我认为您需要从表单中获取动态数量的“serialNumbers”。这是html:

<input type="text" class="form-control" (input)="onNumberChange($event.target.value)">
  <ul *ngIf="items">
   <li *ngFor="let item of items; let i=index">
    {{i}}) <input type="number" [(ngModel)]="serialNumber[i]" class="form-control">
   </li>
  </ul>

并且 .ts 文件应包含:

onNumberChange(numberValue) {  
 this.number = numberValue;
 this.createRange(this.number)
}
    createRange(number){
      for(var i = 1; i <= number; i++){
         this.items.push(i);
      }
}

【讨论】:

  • 你能告诉我项目数组的声明吗?在我的示例中,我有一个名为表单字段的数量。商品是否与我的数量表单字段相同?
猜你喜欢
  • 2021-11-13
  • 2019-07-20
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多