对于 Angular Material MatTable,当链接多个查询时,AngularFire 集合查询 "this.filteredData" 未定义
For Angular Material MatTable, AngularFire collection query "this.filteredData" is undefined when multiple queries are chained
...
this.db
.collection(uid, (ref) => {
console.log('ref', ref);
return ref.where('year', '==', '1954').orderBy('lastName');
})
.snapshotChanges()
...
这会产生错误:
ERROR TypeError: Cannot read properties of undefined (reading 'length')
at MatTableDataSource._filterData (table.js:725)
当我在@angular/material/ivy_ngcc/fesm2015/table 深入研究 node_modules 中的 table 模块时.js :
/**
* Returns a filtered data array where each filter object contains the filter string within
* the result of the filterTermAccessor function. If no filter is set, returns the data array
* as provided.
*/
_filterData(data) {
// If there is a filter string, filter out data that does not contain it.
// Each data object is converted to a string using the function defined by filterTermAccessor.
// May be overridden for customization.
this.filteredData = (this.filter == null || this.filter === '') ? data :
data.filter(obj => this.filterPredicate(obj, this.filter));
if (this.paginator) {
console.log('this.filteredData', this.filteredData);
this._updatePaginator(this.filteredData.length);
}
return this.filteredData;
}
如果我使用 .orderBy 或 where,或任何其他查询本身,this.filteredData returns 过滤数据的数组,如预期的那样。但是,如果我尝试使用多个查询,如上例中的 .where().orderBy()
那么 this.filteredData returns undefined.
有人知道为什么会这样吗?
我认为这肯定与 Angular 生命周期挂钩中 MatPagination 和 MatSort 的位置有关,而 when/how 数据是通过 AngularFire 从 FireStore 获取的。
没有。
我只需要在 FireStore 数据库 -> 索引中创建一个复合索引。在本例中包含“年”和“姓氏”字段。
这让我很失望,因为没有 link 的传统错误将其索引到 firestore 中,通常在这种情况下会出现。
...
this.db
.collection(uid, (ref) => {
console.log('ref', ref);
return ref.where('year', '==', '1954').orderBy('lastName');
})
.snapshotChanges()
...
这会产生错误:
ERROR TypeError: Cannot read properties of undefined (reading 'length')
at MatTableDataSource._filterData (table.js:725)
当我在@angular/material/ivy_ngcc/fesm2015/table 深入研究 node_modules 中的 table 模块时.js :
/**
* Returns a filtered data array where each filter object contains the filter string within
* the result of the filterTermAccessor function. If no filter is set, returns the data array
* as provided.
*/
_filterData(data) {
// If there is a filter string, filter out data that does not contain it.
// Each data object is converted to a string using the function defined by filterTermAccessor.
// May be overridden for customization.
this.filteredData = (this.filter == null || this.filter === '') ? data :
data.filter(obj => this.filterPredicate(obj, this.filter));
if (this.paginator) {
console.log('this.filteredData', this.filteredData);
this._updatePaginator(this.filteredData.length);
}
return this.filteredData;
}
如果我使用 .orderBy 或 where,或任何其他查询本身,this.filteredData returns 过滤数据的数组,如预期的那样。但是,如果我尝试使用多个查询,如上例中的 .where().orderBy()
那么 this.filteredData returns undefined.
有人知道为什么会这样吗?
我认为这肯定与 Angular 生命周期挂钩中 MatPagination 和 MatSort 的位置有关,而 when/how 数据是通过 AngularFire 从 FireStore 获取的。
没有。
我只需要在 FireStore 数据库 -> 索引中创建一个复合索引。在本例中包含“年”和“姓氏”字段。
这让我很失望,因为没有 link 的传统错误将其索引到 firestore 中,通常在这种情况下会出现。