我正面临这种情况:
我有一个前端调用REST端点来获取一些数据并在表格中显示数据。
对于前端方面,我在Typescript中使用带有Material设计的Angular2。
我有一个服务,在开发前端时提供虚假数据,现在我将其转换为使用角度Http服务,以从实际后端获取数据。
这是一个例子,就像我正在使用的服务:
@Injectable()
export class ExampleService{
getData(): Observable<DataType>{ ... }
doStuffOnData(): Observable<boolean>{ ... }
}
现在,getData()
的结果会被直接注入DataSource
,这会被送到MatTable
,这样,当我伪造后端时,我可以返回一个{ {1}}并在修改数据的每个操作上使用BehaviourSubject
。
现在我正在使用后端,我做的第一件事就是将next
的Observable结果直接发送到表中,这样可行,但我不知道如何处理修改。
我想到了两种可能性:
还有别的东西吗?假设我想要发送一个新的GET,我可以以某种方式得到一个“recurringGET”,我可以发送多次,它总是在同一个可观察量上给我结果吗?类似的东西:
http.get
我也完全控制后端,因此如果智能解决方案需要更改呼叫的返回,则可以完成。后端是原始的PHP(是的,痛苦的,但是我主持的唯一可能的解决方案)
答案 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,之前的订阅将接收数据。