在对排序数组使用setValue来设置表单控件时出错。
在对排序数组使用setValue来设置表单控件时出错。
我遇到了这个错误:
ERROR Error: 必须为索引为1的表单控件提供一个值。
我正在用Angular 9开发一个应用程序,问题出在TypeScript上。
下面的代码是可以工作的:
this.registros.controls.arrayProcedimientos.setValue(convert.arrayProcedimientos);
但是如果我对数组进行排序,然后再进行setValue操作,我不知道发生了什么,但是不起作用,例如:
convert.arrayProcedimientos.sort(function(a,b){ return a.fechaInicioProcedimiento > b.fechaInicioProcedimiento; }); //对排序后的数组进行setValue操作 this.registros.controls.arrayProcedimientos.setValue(convert.arrayProcedimientos);
另外,我尝试使用patchValue(),它不会抛出错误,但问题是对象是一个数组的数组。因此,使用patchValue可以正确处理唯一字段,但对于子数组来说却是问题(真的是问题)。
感谢您的关注和帮助,如果您需要一些图片或其他任何东西,请随时提问。
非常棒的社区 🙂
错误出现的原因是在对数组进行排序时,使用了错误的语法。解决方法是修改排序语法,将其改为正确的形式。具体修改步骤如下:
首先,将原来的排序语句改为:
convert.arrayProcedimientos.sort(function(a,b){ return a.fechaInicioProcedimiento > b.fechaInicioProcedimiento; });
修改为:
convert.arrayProcedimientos.sort(function(a,b){ return a.fechaInicioProcedimiento - b.fechaInicioProcedimiento; });
然后,使用setValue
方法给表单控件赋值:
this.registros.controls.arrayProcedimientos.setValue(convert.arrayProcedimientos);
修改后的代码应该可以正常工作了。
在TypeScript sorting an array中可以找到更多关于修改排序语法的信息。
感谢你的回复。尽管回复的不是完全的答案,但我找到了问题所在。问题是我在"准备内存之前"就进行了操作,这就是出错的原因。不管怎样,感谢你的时间。