在对排序数组使用setValue来设置表单控件时出错。

10 浏览
0 Comments

在对排序数组使用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可以正确处理唯一字段,但对于子数组来说却是问题(真的是问题)。

感谢您的关注和帮助,如果您需要一些图片或其他任何东西,请随时提问。

非常棒的社区 🙂

0
0 Comments

错误出现的原因是在对数组进行排序时,使用了错误的语法。解决方法是修改排序语法,将其改为正确的形式。具体修改步骤如下:

首先,将原来的排序语句改为:

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中可以找到更多关于修改排序语法的信息。

感谢你的回复。尽管回复的不是完全的答案,但我找到了问题所在。问题是我在"准备内存之前"就进行了操作,这就是出错的原因。不管怎样,感谢你的时间。

0