在mat表中使用ConnectableObservable而不是DataSource
问题描述:
从我所了解的表中可以看出,表dataSource是一个Observable的薄包装,其接口看起来很像ConnectableObservable。在mat表中使用ConnectableObservable而不是DataSource
后有点挖我的意识到rxjs/ConnectableObservable的连接方法将返回Disposable或更可能 一个Subscription根据自己信任的来源。这与材料中预期的API不太匹配。
在材料网站上给出的例子确实为一些不明确的原因声明了额外的类,但是它感觉像一个常规的ConnectableObservable在这里应该工作得很好。
有没有一种方法,使材料表接受ConnectableObservable作为数据源,还是有我为什么要延长CDK/DataSource的抽象类,一个很好的理由?
这里有两个轻度SO相关:
- How to use material2 data table
- How do I connect my md-table (cdk data-table) to a service to be used as the data source?
PS,如果你有一个链接到工作plunker /小提琴/无论我会很高兴提供示例
答
这是md表的源代码,声明它期望连接到返回N A behaviorSubject https://github.com/angular/material2/blob/master/src/lib/table/table-data-source.ts
export class MatTableDataSource<T> implements DataSource<T> {
/** Stream emitting render data to the table (depends on ordered data
changes). */
private _renderData = new BehaviorSubject<T[]>([]);
/**
* Used by the MatTable. Called when it connects to the data source.
* @docs-private
*/
connect() { return this._renderData; }
.
.
.
从您提供的数据源示例代码的样子,我觉得它预计它会返回一个可观察的部分认购数据的连接方法。我猜在内部它的数据就像this.datasource.connect()。subscribe((res)=> this.row = res)。 ConnectableObservable connect方法做了完全不同的事情,所以我认为你不能用它取代正式的抽象实现。 –
@FanCheung是正确的,数据源不在身边ConnectableObservable瘦包装,它是一个完全不同的抽象,恰好也有一个名为方法'连接()' – Pace
@FanCheung为什么不写一个答案,所以我可以关闭吗?我无法接受评论 – Renaud