【发布时间】:2018-08-07 08:56:35
【问题描述】:
您好,我正在使用 angular 材料 5 和 angular 5 以及 angularFirebase2 版本 5。 我能够获取数据源并显示材料表,但是当我尝试从 firebase 列表中提取数据时,它不会在表中显示数据。
在我的组件内部:
public result;
dataSource = new MatTableDataSource(this.result);
constructor(private db : AngularFireDatabase) {
this.result = this.db.list('sellEntries').valueChanges();
}
<div class="example-container mat-elevation-z8">
<div class="search-bar">
<mat-form-field>
<input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
</mat-form-field>
<button mat-raised-button color="primary" (click)="applyFilter('')">All</button>
<button mat-raised-button color="primary" (click)="applyFilter('india')">India</button>
<button mat-raised-button color="primary" (click)="applyFilter('south africa')">South Africa</button>
</div>
<mat-table #table [dataSource]="dataSource">
<ng-container matColumnDef="position">
<mat-header-cell *matHeaderCellDef> No. </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.position}} </mat-cell>
</ng-container>
<ng-container matColumnDef="material">
<mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.material}} </mat-cell>
</ng-container>
<ng-container matColumnDef="weight">
<mat-header-cell *matHeaderCellDef> Weight </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.weight}} </mat-cell>
</ng-container>
<ng-container matColumnDef="country">
<mat-header-cell *matHeaderCellDef> Symbol </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.country}} </mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
</div>
如果我使用组件绑定,表格可以正常工作并加载数据。我正在寻找一种从 Firebase 实时数据库加载数据源的方法。提前致谢
【问题讨论】:
-
您是否尝试使用构造函数或 ngOnInit 中的实际可观察对象来创建它,而不是改变数据源? this.dataSource = new MatTableDataSource(this.db.list('sellEntries').valueChanges());
-
@funkizer ,我认为这行不通,因为 MatTableDataSource 期望一个数组作为参数,而 valueChanges() 返回一个 observable。
-
Aoki,我认为它也可以观察到,因为 op 没有提到 IDE 警告或任何东西,如果它没有警告,那就是糟糕的 IDE。 :) 我总是使用自定义 DS 扩展 TableDataSource,在 connect 方法中只返回 observable。
-
不是一个糟糕的 IDE,糟糕的 IDE 用户。您应该输入
result作为 Observable,然后您可能会收到警告和构建错误。总是打字! Typescript 可以帮助您非常轻松地捕获这些错误 :)
标签: angular firebase angular-material angularfire2