拖放 angular 顺序不变
drag and drop angular order not changing
我基于这个 https://stackblitz.com/edit/angular-dynamic-survey-creation-golkhg 创建了表单生成器,我将这个函数用于 droped
onDrop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.surveyForm.get('surveyQuestions')['controls'], event.previousIndex, event.currentIndex);
}
questionTitle
必须改变,但不是
但在 html 它正在改变
数组的顺序在 html 中发生变化,但在我的 json 中没有发生变化,有人可以帮助我吗?
编辑
一段时间后我没有再碰这段代码,我发现了一些错误,请看前后图片,这是之前
"quizQuestions": [
{
"questionType": "File Upload",
"display_order": 1,
"questionGroup": {
"questionTitle": "",
"quizAnswer": ""
}
},
{
"questionType": "Tanggal",
"display_order": 2,
"questionGroup": {
"questionTitle": "",
"quizAnswer": ""
}
}
],
我拖第一个表格后,它看起来像这样
"quizQuestions": [
{
"questionType": "Tanggal",
"display_order": 2,
"questionGroup": {
"questionTitle": "",
"quizAnswer": ""
}
},
{
"questionType": "File Upload",
"display_order": 1,
"questionGroup": {
"questionTitle": "",
"quizAnswer": ""
}
}
],
到底有什么问题?我已经尝试了你们提供的两种最佳解决方案,但它仍然是这样,请帮助我。注意:我将 surverysQuestions 更改为 quizQuestions
尝试将 changeDetectionStrategy 添加到您的组件
您需要在您的 formGroup 中添加 display_order 属性 并且您可以在 属性 中看到订单更改。
并在onDrop方法中更改其他问题的显示顺序。像这样:
onDrop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.surveyForm.get('surveyQuestions')['controls'], event.previousIndex, event.currentIndex);
this.questionFormArray.controls[event.currentIndex]['controls']['display_priority']
.setValue(event.currentIndex + 1);
this.questionFormArray.controls.forEach((category, index) => {
(category as FormGroup).controls['display_priority'].setValue(index + 1);
});
}
方法示例:
onDrop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.surveyForm.get('surveyQuestions')['controls'], event.previousIndex, event.currentIndex);
this.surveyForm.get('surveyQuestions').updateValueAndValidity({ onlySelf: false });
}
我基于这个 https://stackblitz.com/edit/angular-dynamic-survey-creation-golkhg 创建了表单生成器,我将这个函数用于 droped
onDrop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.surveyForm.get('surveyQuestions')['controls'], event.previousIndex, event.currentIndex);
}
questionTitle
必须改变,但不是
但在 html 它正在改变
数组的顺序在 html 中发生变化,但在我的 json 中没有发生变化,有人可以帮助我吗?
编辑
一段时间后我没有再碰这段代码,我发现了一些错误,请看前后图片,这是之前
"quizQuestions": [
{
"questionType": "File Upload",
"display_order": 1,
"questionGroup": {
"questionTitle": "",
"quizAnswer": ""
}
},
{
"questionType": "Tanggal",
"display_order": 2,
"questionGroup": {
"questionTitle": "",
"quizAnswer": ""
}
}
],
我拖第一个表格后,它看起来像这样
"quizQuestions": [
{
"questionType": "Tanggal",
"display_order": 2,
"questionGroup": {
"questionTitle": "",
"quizAnswer": ""
}
},
{
"questionType": "File Upload",
"display_order": 1,
"questionGroup": {
"questionTitle": "",
"quizAnswer": ""
}
}
],
到底有什么问题?我已经尝试了你们提供的两种最佳解决方案,但它仍然是这样,请帮助我。注意:我将 surverysQuestions 更改为 quizQuestions
尝试将 changeDetectionStrategy 添加到您的组件
您需要在您的 formGroup 中添加 display_order 属性 并且您可以在 属性 中看到订单更改。
并在onDrop方法中更改其他问题的显示顺序。像这样:
onDrop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.surveyForm.get('surveyQuestions')['controls'], event.previousIndex, event.currentIndex);
this.questionFormArray.controls[event.currentIndex]['controls']['display_priority']
.setValue(event.currentIndex + 1);
this.questionFormArray.controls.forEach((category, index) => {
(category as FormGroup).controls['display_priority'].setValue(index + 1);
});
}
方法示例:
onDrop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.surveyForm.get('surveyQuestions')['controls'], event.previousIndex, event.currentIndex);
this.surveyForm.get('surveyQuestions').updateValueAndValidity({ onlySelf: false });
}