gpt4 book ai didi

使用formArray进行 Angular 拖放

转载 作者:行者123 更新时间:2023-12-03 22:10:33 40 4
gpt4 key购买 nike

我有 2 个数组。我正在实现一个 Angular 拖放,我想使用 FormArray 来保存元素被放入的数组。

问题是我不能将 formcontrol 应用到 div 因为它给出了错误

Error: No value accessor for form control with name: 'language'



这是html

      <div>

<div class="example-container">
<h2>Selected Languages</h2>
<div
cdkDropList
#todoList="cdkDropList"
[cdkDropListData]="anotherarray"
[cdkDropListConnectedTo]="[doneList]"
class="example-list"
(cdkDropListDropped)="drop($event)"
formControlName="language">
<div class="list-group-item list-group-item-action " *ngFor="let item of anotherarray" cdkDrag>
{{item}}
</div>
</div>
</div>

<div class="example-container">
<h2>Available Languages</h2>

<div
cdkDropList
#doneList="cdkDropList"
[cdkDropListData]="testingarray"
[cdkDropListConnectedTo]="[todoList]"
class="example-list"
(cdkDropListDropped)="drop($event)">
<div class="list-group-item list-group-item-action " *ngFor="let item of testingarray" cdkDrag>{{item}}</div>
</div>
</div>

</div>

<button type="submit" class="btn btn-primary my-2" translate>saveButtonLabel
<fa-icon *ngIf="saveIcon" [icon]="saveIcon" [spin]="saveIcon.iconName === 'spinner'"></fa-icon>
</button>
</form>

最佳答案

Angular Material 拖放 API 有一个 moveItemInArray 函数,如 here 所示
这仅支持常规数组,但根据 pierNik 的回答 here on StackOverflow ,您可以使用以下函数复制 FormArray 的功能:

import { FormArray } from '@angular/forms';

/**
* Moves an item in a FormArray to another position.
* @param formArray FormArray instance in which to move the item.
* @param fromIndex Starting index of the item.
* @param toIndex Index to which he item should be moved.
*/

export function moveItemInFormArray(
formArray: FormArray,
fromIndex: number,
toIndex: number
): void {
const dir = toIndex > fromIndex ? 1 : -1;

const item = formArray.at(fromIndex);
for (let i = fromIndex; i * dir < toIndex * dir; i = i + dir) {
const current = formArray.at(i + dir);
formArray.setControl(i, current);
}
formArray.setControl(toIndex, item);
}
然后在调用代码中传递 formArray 代替普通数组。
get formControls(): FormArray {
return this.form.get('arrayName') as FormArray;
}

constructor() {
this.form = this.formBuilder.group({
arrayName: this.formBuilder.array([]),
});
}

drop(event: CdkDragDrop<string[]>) {
moveItemInFormArray(
this.formControls,
event.previousIndex,
event.currentIndex
);
}
查看正在工作的 Stackblitz here

关于使用formArray进行 Angular 拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54712286/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com