用角形材料拖放-索引的setValue

时间:2020-04-25 17:17:55

标签: angular indexing drag-and-drop angular7 formbuilder

对于以下问题,我将不胜感激。 我正在尝试使用可编辑的索引构建拖放组件,像这样 Example 所以我需要将索引发送到formArray。 我的组件中包含以下代码

    this.form = this.formBuilder.group({
        phase1: this.formBuilder.group({
          EE: this.formBuilder.array([this.addPhase()])
  })
});

对于addPhase,我有以下代码:

  addPhase() {
     return this.formBuilder.group({
       indexO: [''],
       email: ['', [Validators.required, Validators.email]],
});

}

通过单击“添加新”按钮,我正在设置像这样的索引值:

  get phaArray() {
    const control = <FormArray>(<FormGroup>this.form.get('phase1')).get('EE');
    return control;

}

  addMorePhase() {
    this.phaArray.push(this.addPhase());
    for (var i = 1; i < this.phaArray.length; i++) {
      (<FormGroup>this.phaArray.at(i)).get('indexO').setValue(i + 1);
}   

} 这是可行的,但是如果我想通过拖放操作来设置setValue,则会出现问题。 例如,如果我将一个位置交换为第一和第二的位置,则效果很好,但是如果我将第三和第一交换了位置,则它不起作用。

这就是我要拖动的东西

drop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.phaArray.value, event.previousIndex, event.currentIndex);

var previous = event.previousIndex + 1;
var current = event.currentIndex + 1;

for (var i = 0; i < this.phaArray.length; i++) {
  if (previous == ((<FormGroup>this.phaArray.at(i)).get('indexO').value)) {
    ((<FormGroup>this.phaArray.at(i)).get('indexO').setValue(current));
    ((<FormGroup>this.phaArray.at(current)).get('indexO').setValue(previous));
  }
}

}

0 个答案:

没有答案