对于以下问题,我将不胜感激。 我正在尝试使用可编辑的索引构建拖放组件,像这样 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));
}
}
}