【问题标题】:How to avoid same value repeating in the formcontrolname using angular8如何使用 Angular 8 避免在 formcontrolname 中重复相同的值
【发布时间】:2020-04-02 13:40:44
【问题描述】:

我已经使用 formArray 来循环值并在选择一个项目时,我们可以根据我们选择的一侧向右和向左移动。在这里,我从右边选择最后一个项目并向左移动,然后我选择最后一个但是一个并将其向左移动。然后重复值来了。我认为这是由于索引值不匹配。我无法纠正这个问题。 谁能帮我解决这个问题。

演示: Working Demo

HTML:

<div class="card-body overflow-auto py-0" formArrayName="agentNotGroupView">
                  <div class="swap-list-item" *ngFor="let items of agentNotinView; let i = index" [formGroupName]="i"
                    [class.selected]="selected2.includes(items)">
                    <input formControlName="agentNotInViewValue" [readOnly]="true" (click)="onSelect(2, items)" [disabled] = "isReadOnly"/>
                  </div>
                </div>

TS:

    this.agentNotInViewArray = this.FB.array(
            this.agentNotinView.map(x => this.FB.group({
              agentNotInViewValue: this.FB.control(x.value)
            }))
          );
    
          this.agentGroupNotViewInfoForm = this.FB.group({
            agentNotGroupView: this.agentNotInViewArray
          })

move from one button to other:
moveFrom(fromListNumber: number) {
    const selected: MyInterface[] = this.getSelected(fromListNumber);
    if (selected.length === 0) {
      return;
    }

    const toListNumber: number = fromListNumber === 1 ? 2 : 1;

    const fromModel: MyInterface[] = this.getModel(fromListNumber);
    const fromFormArray: FormArray = this.getFormArray(fromListNumber);

    const toModel: MyInterface[] = this.getModel(toListNumber);
    const toFormArray: FormArray = this.getFormArray(toListNumber);

    // remove items and form groups    
    selected.forEach((item) => {
      const index: number = fromModel.indexOf(item);
      const formGroup: FormGroup = fromFormArray.controls[index] as FormGroup;

      // remove from model
      fromModel.splice(index, 1);
      // remove from from array
      fromFormArray.removeAt(index);

      // add to form array
      toFormArray.push(formGroup);
      // add item to model
      toModel.push(item);
    });
    // clear selected
    selected.length = 0;
  this.groupInfoForm();
  this.notGroupInfoForm();
    }

根据我的调试,items.value 和 items.id 很好,但是 formcontrolName 给出了重复的值。 需要帮助来纠正这个问题。

【问题讨论】:

    标签: angular angular-reactive-forms


    【解决方案1】:

    我能够通过在再次调用表单时添加 if ans else 条件来解决这个问题, 原来如此。

    TS:

    moveFrom(fromListNumber: number) {
        const selected: MyInterface[] = this.getSelected(fromListNumber);
        if (selected.length === 0) {
          return;
        }
    
        const toListNumber: number = fromListNumber === 1 ? 2 : 1;
    
        const fromModel: MyInterface[] = this.getModel(fromListNumber);
        const fromFormArray: FormArray = this.getFormArray(fromListNumber);
    
        const toModel: MyInterface[] = this.getModel(toListNumber);
        const toFormArray: FormArray = this.getFormArray(toListNumber);
    
        // remove items and form groups    
        selected.forEach((item) => {
          const index: number = fromModel.indexOf(item);
          const formGroup: FormGroup = fromFormArray.controls[index] as FormGroup;
    
          // remove from model
          fromModel.splice(index, 1);
          // remove from from array
          fromFormArray.removeAt(index);
    
          // add to form array
          toFormArray.push(formGroup);
          // add item to model
          toModel.push(item);
        });
        // clear selected
        selected.length = 0;
        if(fromListNumber == 2) {
      this.groupInfoForm();
        } else if(fromListNumber == 1) {
      this.notGroupInfoForm();
        }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2020-10-17
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多