Перетаскивание с angular материалом - setValue индекса - PullRequest
0 голосов
/ 25 апреля 2020

Буду очень признателен за любую помощь или предложение по следующей проблеме. Я пытаюсь создать компонент перетаскивания с редактируемыми индексами, например Пример , поэтому мне нужно отправить индексы в мой 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);
}   

}, и это работает, но если я хочу установить значение с помощью перетаскивания, возникают проблемы. Это отлично работает, если я поменяю местами, например, первое и второе места, но если поменять местами третье и первое, это не сработает.

Вот что у меня есть для перетаскивания:

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));
  }
}

} ​​

...