用于以角度形式添加新行的用户输入的功能

我有一个表单,希望用户可以根据需要生成或删除一行输入。最好的方法是什么?我相信我必须在我的html文件中包括这个地方。 *ngFor="let userline of users"

这是当前表单的外观。当按下绿色的“ +”号时,我想填充一个新行。同样,当单击红色的“ x”时,我希望删除该行。

用于以角度形式添加新行的用户输入的功能

form.component.html

<h3 align="center">Requested Dates</h3>
            <!-- PrimeNG InputName -->
            <div class="ui-g form-group">
                <div class="ui-g-12 ui-md-1" id="test">
                    <button pButton type="button" id="deleteButton" icon="pi pi-times" class="ui-button-danger" (click)="onRemoveclicked()"></button>
                </div>


                <div class="ui-g-12 ui-md-2" id="test">
                    <!-- <label for="name">Name</label> -->
                    <input type="text" pInputText name="fname" class="form-control" [(ngModel)]="user.name" placeholder="Name" />
                </div>


                <div class="ui-g-12 ui-md-2">

                    <p-dropdown [options]="leave2" [(ngModel)]="selectedLeave2" (ngModelChange)='setLeave($event)' name="selectedLeave2" placeholder="Select Leave Code *" optionLabel="name"></p-dropdown>
                </div>
<div class="ui-g-12 ui-md-2" id="test">
                    <p-calendar [showIcon]="true" [(ngModel)]="user.fromDate" name="fromDate" placeholder="From Date*" dateFormat="mm.dd.yy">
                    </p-calendar>
                </div>
<div class="ui-g-12 ui-md-1" id="test">
                    <!-- <label for="fromTime">From Time</label> -->
                    <input type="text" pInputText name="lname" class="form-control" [(ngModel)]="user.fromTime" placeholder="From Time*" />
                </div>
<div class="ui-g-12 ui-md-2" id="test">
                    <p-calendar [showIcon]="true" [(ngModel)]="user.toDate" name="toDate" placeholder="To Date*">
                    </p-calendar>
                </div>
<div class="ui-g-12 ui-md-1" id="test">
                    <!-- <label for="toTime">To Time</label> -->
                    <input type="text" pInputText name="lname" class="form-control" [(ngModel)]="user.toTime" placeholder="To Time*" />
                </div>
<br>

                <div class="ui-g-12 ui-md-2" id="test">
                    <input type="submit" value="save" class="btn btn-success">
                </div>
                <button pButton type="button" id="addButton" icon="pi pi-plus" class="ui-button-success" (click)="onAddClicked()"></button>
                <!-- </div> -->
            </div>
        </div>
    </form>

form.component.ts

import { Component,OnInit } from '@angular/core';
import{User}  from '../user';
import{Router}  from '@angular/router';
import{UserService}  from '../shared_service/user.service';

interface Supervisor {
  name: string;
  code: string;
}

interface Leave {
  name: string;
  code: string;
}

@Component({
  selector: 'app-form',templateUrl: './form.component.html',styleUrls: ['./form.component.css']
})
export class FormComponent implements OnInit {
  private user:User;

  constructor(private _userService:UserService,private _rotuer: Router) {
    this.supervisor2 = [
      { name: 'Samuel Chan',code: 'SC' },{ name: 'Max Cardone',code: 'MC' },{ name: 'Kylie Brooks',code: 'KB' },];

    this.leave2 = [
      { name: 'Personal Leave',code: 'PL' },{ name: 'Sick Leave',code: 'SL' },{ name: 'Vacation Leave',code: 'VL' },{ name: 'Any Leave',code: 'AL' }
    ];
  }

  ngOnInit() {
   this.user =this._userService.getter();
   this.user = { id: null,name:'',fromDate: '',fromTime:'',toDate:'',toTime:'',selectedSupervisor2:'',selectedLeave2:'',};
   //this._userService.getter();
  }


  supervisor2: Supervisor [];
  selectedSupervisor2: Supervisor;

  leave2: Leave [];
  selectedLeave2: Leave;

  //  seefromDate(event) {
  //    console.log(event);
  //  }

 // Method to Add row of dates on button click. Will go up to 7 fields
  onAddClicked() {
    if (this.dates.length < 8) {
      this.dates.push({ leaveCode: "",fromDate: "",fromTime: "",toDate: "",toTime: "" })
        ;
    }
  }
  // Method to remove dates on button click. Will always have one date field displayed
  onRemoveclicked() {
    if (this.users.length > 1) { this.users.pop(); }
  }
  setSupervisor(event){
    if (event && event.name)
    this.user.selectedSupervisor2 = (event.name);
  }

  setLeave(event){
    if (event && event.name)
    this.user.selectedLeave2 = (event.name);
  }


  processForm(){

    console.log(this.user);
    if(this.user.id==undefined){
       this._userService.addItem(this.user).subscribe((user)=>{
         console.log(user);
         this._rotuer.navigate(['/table']);
       },(error)=>{
         console.log(error);
       });
    }else{
       this._userService.saveOrupdateItem(this.user).subscribe((user)=>{
         console.log(user);
         this._rotuer.navigate(['/table']);
       },(error)=>{
         console.log(error);
       });
    }
  }
}

user.ts

export class User {
    id:Number;
    name:String;
    fromDate: String;
    fromTime:String;
    toDate: String;
    toTime:String;
    selectedSupervisor2: String;
    selectedLeave2: String;
}

exchange456 回答:用于以角度形式添加新行的用户输入的功能

快速 您在.ts

中定义一个FormArray
formArray:FormArray=new FormArray([]);

您有一个返回formGroup的函数

getFormGroup(data: User) {
    data = data || ({} as User);
    return new FormGroup({
      id: new FormControl(data.id),name: new FormControl(data.name),fromDate: new FormControl(data.fromDate),fromTime: new FormControl(data.fromTime),toDate: new FormControl(data.toDate),toTime: new FormControl(data.toTime),selectedSupervisor2: new FormControl(data.selectedSupervisor2),selectedLeave2: new FormControl(data.selectedLeave2)
    });
  }

然后,在自己的.html中,您可以拥有一个类似

的按钮
<button (click)="formArray.push(getFormGroup(null))">Add</button>

.html

<div [formGroup]="formArray">
  <div *ngFor="let group of formArray.controls;let i=index" [formGroup]="group">
    <input formControlName="id">
  <input formControlName="name">
  <input formControlName="fromDate">
  <input formControlName="fromTime">
  <input formControlName="toDate">
  <input formControlName="toTime">
  <input formControlName="selectedSupervisor2">
  <input formControlName="selectedLeave2">
  <button (click)="formArray.removeAt(i)">Remove</button>
  </div>
</div>

您可以在stackblitz

中看到

别忘了导入ReactiveFormModule!

本文链接:https://www.f2er.com/3116896.html

大家都在问