角动态添加一行

时间:2018-09-28 14:35:53

标签: angular

我是新手。我正在尝试创建新行。

我正在尝试在表单中添加一个新目标,该目标又包含步骤,当我创建新目标时,我将继续执行新步骤。

但是当我继续创建一个新目标时,它将显示我为先前目标创建的步骤。我在创建表单步骤时遇到问题。 有人可以给我指出正确的方向吗?

链接在下面 stackblitz link

2 个答案:

答案 0 :(得分:0)

这是因为您只有一个stepsArray,并且每个目标都显示了这一点。您的模型应如下所示:

objectives = [{
  name: string,
  steps: [
    actionstep: string,
    completionDate: Date,
    wwmonitor: string,
    hwmonitor: string
  ]
}]

当用户单击添加目标时,应将新对象推入目标。当用户单击添加步骤时,应将一个新对象推入该目标步骤。在模板中,您应该像这样进行迭代:

*ngFor="let objective of objectives
    display data for objective
    *ngFor="let step of objective.steps"
        display data for step

答案 1 :(得分:0)

我阅读了您的代码。首先要澄清一下自己,您应该尽量使变量名接近其真实含义。例如,stepsArray是个好名字,但fieldArray应该称为ObjectiveArray。

其次,关于您的代码结构。如我所见,您可以有“许多目标”,而那些目标可以有“许多步骤”。您的模型应该“反映”这一点。因此,在您的代码中,您应该只有一个数组,一个目标数组:

像这样:一个目标有一个名称和步骤列表。

objectives: Array<{name : string, steps: Array<any>}> = [];

我键入了任何Array的步骤,但可以键入更多

Array<{ wwmonitor : string, hwmonitor : string, ...>}

如何添加目标? (旧的addFieldValue)

addNewObjective() {
      this.objectives.push({ name : '', steps : []});
  }

如何添加步骤?

  addStepsValue(objective) {      
      objective.steps.push({}); 
  }

我让你想象“删除”:D

管理您的html:

      <table>
        <tbody *ngFor='let objective of objectives; let i = index'>
          <tr>
            <td>Objective</td>
          </tr>
          <tr>
            <td >
              <div class="input-group">
                <input class="form-control py-2 " type="text" [(ngModel)]="objective.name" [attr.name]="'objective'-i">

                <span class="g-float-right">
                    <button (click)="deleteFieldValue(i)">delete obj</button>
                </span>

                <span class="g-float-right">         
                     <button (click)="addStepsValue(objective)">add Steps</button>
                </span>
              </div>
            </td>
          </tr>
          <tr>
            <td>
              <table class="table table-bordered table-hover u-table--v1 mb-0">
                <thead>
                  <tr>
                    <th>Step</th>
                    <th>Completion Date</th>
                    <th> Monitor</th>
                    <th>hmonitored?</th>
                    <th class="text-right">ACTION</th>
                  </tr>
                </thead>
                <tbody  *ngFor='let step of objective.steps; let z = index'>
                  <tr >
                    <td><input class="form-control" type="text" [attr.id]="'fld1' + z" [(ngModel)]="step.actionstep"></td>
                    <td><input type="text" class="form-control rounded-0 form-control-sm" placeholder="mm-dd-yyyy" [(ngModel)]="step.date"></td>
                    <td><input class="form-control" type="text"[(ngModel)]="step.wwmonitor"></td>
                    <td><input class="form-control" type="text"[(ngModel)]="step.hwmonitor"></td>
                    <td class="text-right">
                        <button (click)="deleteStepsValue(objective, z)">delete steps</button>
                    </td>
                  </tr>
                </tbody>
              </table>