【问题标题】:Using ConnectableObservable instead of DataSource in mat table在 mat 表中使用 ConnectableObservable 而不是 DataSource
【发布时间】:2018-03-30 02:36:24
【问题描述】:

据我了解 mat table dataSource 是 Observable 的一个薄包装,它的界面看起来很像 ConnectableObservable

经过一番挖掘,我意识到 rxjs/ConnectableObservable 的连接方法返回一个 Disposable 或更可能 Subscription 取决于您信任的来源。这与材料中预期的 API 不太匹配。

材料网站上给出的示例确实声明了一些额外的类,但感觉就像普通的 ConnectableObservable 在这里应该可以正常工作。

有没有办法让材料表接受 ConnectableObservable 作为数据源,或者我有充分的理由扩展 cdk/DataSource 抽象类?

这里有两个稍微相关的 SO:

ps如果你有一个可以工作的 plunker/fiddle/任何东西的链接,我很乐意提供一个例子

【问题讨论】:

  • 从您提供的数据源示例代码的外观来看,我认为它需要一个连接方法,该方法返回一个 Observable 以供组件订阅数据。我猜在内部它得到的数据是 this.datasource.connect().subscribe((res)=>this.row=res)。 ConnectableObservable 连接方法做了完全不同的事情,所以我认为你不能用它替换正式的抽象实现。
  • @FanCheung 是对的,DataSource 不是 ConnectableObservable 的薄包装,它是一个完全不同的抽象,恰好也有一个名为connect()的方法
  • @FanCheung 为什么不写一个答案让我可以关闭?我无法接受评论

标签: angular rxjs angular-material


【解决方案1】:

这是 md table 的源代码,说明它期望连接返回一个 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; }
.
.
.

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 2013-02-18
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多