angular - 从 Firestore 加载 Firebase 内容的 Angular 材料表批次
问题描述
我正在尝试在我的 Angular 应用程序中从 Firebase 的 firestore 中的集合中获取数据,但没有数据出现,而数据库中有数据。我尝试将数据的获取从我的数据服务移动到组件,但那里没有任何效果。
组件 HTML 文件
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8">
<ng-container matColumnDef="communityTitle">
<th mat-header-cell *matHeaderCellDef> Community Title/Name </th>
<td mat-cell *matCellDef="let element"> {{element.communityTitle}} </td>
</ng-container>
<ng-container matColumnDef="dateOfBlacklist">
<th mat-header-cell *matHeaderCellDef> Date of Blacklist </th>
<td mat-cell *matCellDef="let element"> {{element.dateOfBlacklist}} </td>
</ng-container>
<ng-container matColumnDef="reason">
<th mat-header-cell *matHeaderCellDef> Reason for Blacklist </th>
<td mat-cell *matCellDef="let element"> {{element.reason}} </td>
</ng-container>
<ng-container matColumnDef="effectiveDate">
<th mat-header-cell *matHeaderCellDef> Effective Until (Date) </th>
<td mat-cell *matCellDef="let element"> {{element.effectiveDate}} </td>
</ng-container>
<ng-container matColumnDef="notes">
<th mat-header-cell *matHeaderCellDef> Notes </th>
<td mat-cell *matCellDef="let element"> {{element.notes}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
组件打字稿文件
import { Component, OnInit } from '@angular/core';
import { BlacklistedCommunityData } from 'src/app/interface';
import { DataService } from 'src/app/data.service';
import { AngularFirestore } from '@angular/fire/firestore';
import { AngularFirestoreCollection } from '@angular/fire/firestore';
import { Observable } from 'rxjs';
@Component({
selector: 'app-rules-blacklisted-communities',
templateUrl: './rules-blacklisted-communities.component.html',
styleUrls: ['./rules-blacklisted-communities.component.scss']
})
export class RulesBlacklistedCommunitiesComponent implements OnInit {
itemCollection: AngularFirestoreCollection<BlacklistedCommunityData>
items: Observable<BlacklistedCommunityData[]>
constructor(private dataService: DataService, private afs: AngularFirestore) {
this.itemCollection = this.afs.collection('fzrpBlacklistedCommunities');
this.items = this.itemCollection.valueChanges();
console.log(this.items)
}
displayedColumns = [
'communityTitle',
'dateOfBlacklist',
'reason',
'effectiveDate',
'notes'
];
dataSource = this.items;
ngOnInit(): void {
}
}
解决方案
将上面的打字稿文件修改为以下内容后,问题已得到解决:
import { Component, OnInit, AfterViewInit } from '@angular/core';
import { MatTableDataSource } from '@angular/material/table';
...
export class RulesBlacklistedCommunitiesComponent implements AfterViewInit {
dataSource: MatTableDataSource<any>;
displayedColumns = [
'communityTitle',
'dateOfBlacklist',
'reason',
'effectiveDate',
'notes'
];
constructor(private dataService: DataService, private afs: AngularFirestore) {
}
// dataSource = new MatTableDataSource<any>(this.items);
ngAfterViewInit() {
this.afs.collection('fzrpBlacklistedCommunities').valueChanges().subscribe(data => {
this.dataSource = new MatTableDataSource(data);
})
}
}
推荐阅读
- c# - 将多维数组从 ajax 传递到 ASP.NET MVC
- android - 尝试设置嵌套对象 - 获取“IllegalArgumentException:无效数据。不支持的类型”
- c# - 使用实体框架将数据保存到数据库
- python - 视图 blog.views.post_list 没有返回 HttpResponse 对象。它返回 None 代替(Django)
- react-native - ReactNative 与 Redux - FlatList scrollToEnd
- three.js - Threejs从数组更改体素不透明度
- javascript - Bootstrap:导航栏中的链接在滚动中太晚接收活动类
- javascript - Nodejs 未捕获异常处理
- c# - 如何使文本框在c#中显示当前的webbrowser url
- apache-spark - pyspark 数据框 UDF 异常处理