更新:
我正在使用 a来自定义MatDataTable
显示FormArray
内容,DataSource
问题似乎出在DataSource.connect()
函数上。我正在合并 2 个 observables 以根据分页器页面配置对数据进行切片,如下所示:
export class DimensionDataSource extends DataSource<any> {
renderedData: BuildingDimension[] = [];
constructor(
private _dimensions: FormArray,
private _paginator: MatPaginator,
) {
super();
}
connect(): Observable<BuildingDimension[]> {
// Listen for any changes in the base data or pagination
const displayDataChanges = [
this._dimensions.valueChanges,
this._paginator.page,
];
return Observable
.merge(...displayDataChanges)
.map(() => {
// Test for empty data set
if (!this._dimensions.value) {
return [];
}
// Grab the page's slice of the sorted data.
const startIndex = this._paginator.pageIndex * this._paginator.pageSize;
this.renderedData = this._dimensions.value.splice(startIndex, this._paginator.pageSize);
// Set paginator length
this._paginator.length = this._dimensions.value.length;
return this.renderedData;
});
}
disconnect() { }
}
我在我的应用程序的其他地方成功地使用了相同的方法,但在这里它不起作用。
我在 Stackblitz 中进行实验时发现如下。如果分页器页面大小设置为 5,则添加的前 5 个项目不会出现在FormArray
值中,但是,第 6 个会出现。在此处查看并注意控制台调试日志。另外,请注意当您更改任何添加超过 5 个项目的分页器控件时会发生什么:
https://stackblitz.com/edit/angular-tdrjqy
原始问题:
FormArray
数组中带有 a 的FormGroup
a怎么可能controls
没有值?我在我的应用程序的 2 个部分中设置了相同的设置,但由于某种原因,在一个部分中,该值是一个空数组......我已经花了几个小时在这上面,但我无法复制它,修复它或找到任何解释这里发生的事情的文档!
这是控制台日志的屏幕截图FormArray
: