Angular2中的Http数据表:如何处理修改?
问题描述:
我面临这种情况:Angular2中的Http数据表:如何处理修改?
我有一个前端调用REST端点来获取一些数据并在一个表中显示数据。
对于前端,我正在使用TypeScript中的Material Design设计Angular2。
我有一个在开发前端时提供假数据的服务,现在我将它转换为使用角度Http服务,从实际后端获取数据。
这是一个例子有点像我使用的服务:
@Injectable()
export class ExampleService{
getData(): Observable<DataType>{ ... }
doStuffOnData(): Observable<boolean>{ ... }
}
现在,getData()
结果被直接喷射到它被馈送到一个MatTable
,这样,当我伪造的一个DataSource
后端,我可以返回BehaviourSubject
并在修改数据的每个操作上使用next
。
现在我正在使用后端,我做的第一件事就是直接将http.get
的Observable结果发送到表中,并且这可行,但我不知道如何处理修改。
两种可能性来我的脑海:
- 发送一条新GET请求的每篇文章之后检索服务器端更新的数据
- 缓存在服务中的数据,并手动修改后,每个成功的请求制作。
还有别的吗?比方说,我想发送一个新的GET,我可以以某种方式获得我可以多次发送的“recurringGET”,并且它始终在相同的可观察值上给出结果?喜欢的东西:
@Injectable()
export class ExampleService{
getData(): Observable<DataType>{ return http.recurringGET(); }
doStuffOnData(): Observable<boolean>{ http.reissueGET(); }
}
我也完全控制后端,因此,如果一个聪明的解决方案需要改变调用的返回,是可以做到的。后端是原始的PHP(是的,痛苦的,但唯一可能的解决方案给予我的托管)
答
你应该看看rxjs Subject。 你可以做的是在你的服务中存储一个privat dataSubject,并向其发送获取/发布数据。例如。
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和以前的订阅将接收到的数据。
你提到的(重复性GET)被称为长轮询(https://stackoverflow.com/questions/333664/how-do-i-implement-basic-long-polling)。但我不知道这是否仍然使用。更好的方法是使用websockets。 –
你能详细点吗? websocket如何适应这种情况? – bracco23
使用websockets,您可以创建一个“响应式”流程:而不是前端请求数据的每X秒(然后可能大多数时间响应不会有新数据),后端将负责发送/通过套接字将数据推送到前端(也就是说,简单来说,这两层之间的“开放网关”)。 –