Angular2中的Http数据到表:如何处理修改?

时间:2017-10-10 17:21:28

标签: angular material-design

我正面临这种情况:

我有一个前端调用REST端点来获取一些数据并在表格中显示数据。

对于前端方面,我在Typescript中使用带有Material设计的Angular2。

我有一个服务,在开发前端时提供虚假数据,现在我将其转换为使用角度Http服务,以从实际后端获取数据。

这是一个例子,就像我正在使用的服务:

@Injectable()
export class ExampleService{
    getData(): Observable<DataType>{ ... }
    doStuffOnData(): Observable<boolean>{ ... }
}

现在,getData()的结果会被直接注入DataSource,这会被送到MatTable,这样,当我伪造后端时,我可以返回一个{ {1}}并在修改数据的每个操作上使用BehaviourSubject

现在我正在使用后端,我做的第一件事就是将next的Observable结果直接发送到表中,这样可行,但我不知道如何处理修改。

我想到了两种可能性:

  1. 每次POST后发送新的GET请求以检索服务器端更新数据
  2. 缓存服务中的数据,并在每次成功请求后手动修改。
  3. 还有别的东西吗?假设我想要发送一个新的GET,我可以以某种方式得到一个“recurringGET”,我可以发送多次,它总是在同一个可观察量上给我结果吗?类似的东西:

    http.get

    我也完全控制后端,因此如果智能解决方案需要更改呼叫的返回,则可以完成。后端是原始的PHP(是的,痛苦的,但是我主持的唯一可能的解决方案)

1 个答案:

答案 0 :(得分:0)

你应该看看rxjs Subject。 你可以做的是在你的服务中存储一个privat dataSubject并向它发出get / post数据。例如。

import { Subject, Observable } from "rxjs";
import 'rxjs/add/operator/catch';    

@Injectable()
export class ExampleService{
private _dataSubject = new Subject()
    constructor(){
       // get initial data
       someHttpCall()
            .map(data => this._dataSubject.next(data.json()))
            .catch(err => this._dataSubject.error(err.json()))
    }

    getData(): Observable<DataType>{ return this._dataSubject; }
    doStuffOnData(): void{ 
       someHttpCall()
            .map(data => this._dataSubject.next(data.json()))
            .catch(err => this._dataSubject.error(err.json()))
    }
}

然后在您的组件中,您只需订阅ExampleService.getData(),当您调用doStuffonData时,数据将发送到_dataSubject,之前的订阅将接收数据。