【发布时间】:2021-08-25 19:31:11
【问题描述】:
团队
我正在创建拖放操作,以便将字段从我的工具栏移动到面板
但我在表单中拖放时遇到错误这是我目前遇到的错误。
这是我的 ts 代码
ngOnInit(): void {
this.fields = localStorage.getItem('fields') ? JSON.parse(localStorage.getItem('fields')) : {}
this.getFieldData();
this.getCountryData();
this.myForm = this.formBuilder.group({
arr: this.formBuilder.array([this.createItem()])
})
this.personalDetails = this.formBuilder.group({
title: ['', Validators.required],
firstName: ['', Validators.required],
lastName: ['', Validators.required],
guardianName: ['', Validators.required],
guardianContactNo: ['', Validators.required],
dob: ['', Validators.required],
universityName: [''],
middleName: ['']
});
this.contactDetails = this.formBuilder.group({
address1: ['', Validators.required],
address2: ['', Validators.required],
apt: ['', Validators.required],
countryData: ['', Validators.required],
stateData: ['', Validators.required],
cityData: ['', Validators.required],
postalCode: [''],
phoneNumberH: [''],
phoneNumberO: [''],
phoneNumberOff: [''],
mobileNumber: [''],
email: ['']
});
}
onAnyDrop(e: any, formGroupName: string) {
console.log(e, formGroupName);
if (formGroupName === 'personalDetails') {
this.addInput(this.personalDetails, e.fieldType, 'ABCED', false);
} else if (formGroupName === 'contactDetails') {
this.addInput(this.contactDetails, e.fieldType, 'XYZABC', false);
}
}
addInput(fg, type: string, label: string, required: boolean = false): void {
const arrayControl = <FormArray>this.myForm.controls['formArray'];
let newGroup
switch (type) {
case 'Text': {
fg.array([{
[label]: ['', required ? Validators.required : null]
}])
break;
}
case 'Number': {
fg.array({
[label]: [0, required ? Validators.required : null]
});
break;
}
default: {
fg.array({
[label]: ['', required ? Validators.required : null]
});
break;
}
}
arrayControl.push(newGroup);
}
这是我的 HTML
<div class="fieldexplorer">
<div class="sectionHeader_field">
Field Explorer
</div>
<div draggable [dragData]="label" *ngFor="let label of labels;">
<div class="hoverselect" style="padding: 8px;border: 1px solid black;">
<span [ngClass]="(label.fieldType=='Number'?'numberbefore':(label.fieldType=='List'?'listbefore':'radiobefore'))">
</span> {{label.labelName}}
</div>
</div>
</div>
这是我的可放置区域
<div class="row" [droppable] [dragHintClass]="'drag-hint'" (onDrop)="onAnyDrop($event, 'personalDetails')">
</div>
<div class="row" [droppable] [dragHintClass]="'drag-hint'" (onDrop)="onAnyDrop($event, 'contactDetails')">
</div>
【问题讨论】:
-
请提供
onAnyDrop的代码。 -
@N.F.我添加了 onAnyDrop 代码也请检查
-
你想在
addInput做什么?您是否尝试将名为label的新 FormControl 添加到this.personalDetails或this.contactDetails并将其添加到this.myForm.arr? -
@N.F.你是对的
标签: angular typescript angular8 ngdraggable