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