2017-10-10 46 views
0

我面临这种情况: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结果发送到表中,并且这可行,但我不知道如何处理修改。

两种可能性来我的脑海:

  1. 发送一条新GET请求的每篇文章之后检索服务器端更新的数据
  2. 缓存在服务中的数据,并手动修改后,每个成功的请求制作。

还有别的吗?比方说,我想发送一个新的GET,我可以以某种方式获得我可以多次发送的“recurringGET”,并且它始终在相同的可观察值上给出结果?喜欢的东西:

@Injectable() 
export class ExampleService{ 
    getData(): Observable<DataType>{ return http.recurringGET(); } 
    doStuffOnData(): Observable<boolean>{ http.reissueGET(); } 
} 

我也完全控制后端,因此,如果一个聪明的解决方案需要改变调用的返回,是可以做到的。后端是原始的PHP(是的,痛苦的,但唯一可能的解决方案给予我的托管)

+0

你提到的(重复性GET)被称为长轮询(https://stackoverflow.com/questions/333664/how-do-i-implement-basic-long-polling)。但我不知道这是否仍然使用。更好的方法是使用websockets。 –

+0

你能详细点吗? websocket如何适应这种情况? – bracco23

+0

使用websockets,您可以创建一个“响应式”流程:而不是前端请求数据的每X秒(然后可能大多数时间响应不会有新数据),后端将负责发送/通过套接字将数据推送到前端(也就是说,简单来说,这两层之间的“开放网关”)。 –

回答

0

你应该看看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和以前的订阅将接收到的数据。

+0

我想这是假设POST调用回显我修改过的数据。现在它没有,它给了我一个布尔值(成功/不成功)。我应该改变API吗?其他REST API中的常见行为是什么? – bracco23

+0

是的,好吧,我不能回答这个问题,但我个人的经验告诉我,返回发布的对象比返回布尔值更有用。但是你选择最适合你的应用的东西。 – Andresson

+1

抬起头,是的,根据REST原则返回对象的状态确实是最好的事情,所以做到了这一点,并实现了您的解决方案。工作正常。 – bracco23