Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 如何在触发事件时在所有连接的设备上立即更新Angular2应用程序?_Http_Angular_Ionic2 - Fatal编程技术网

Http 如何在触发事件时在所有连接的设备上立即更新Angular2应用程序?

Http 如何在触发事件时在所有连接的设备上立即更新Angular2应用程序?,http,angular,ionic2,Http,Angular,Ionic2,我需要使用Angular2和Ionic2构建一个餐厅管理移动应用程序,并使用Angular2为同一家餐厅构建一个网站,该网站不断进行http连接以存储和检索数据库中的数据,以维护最新数据 例如,如果一个订单请求是从一个服务员的手机发出的,那么新的订单将被发布到数据库中,我可以完成这项工作。厨师长需要得到新订单已创建的即时通知。此外,数据还需要反映在其他员工的电话和网站上 我所能想到的就是使用setInterval,但由于我以前从未做过类似的事情,我不确定这是不是正确的方法 组件 orders:

我需要使用Angular2和Ionic2构建一个餐厅管理移动应用程序,并使用Angular2为同一家餐厅构建一个网站,该网站不断进行http连接以存储和检索数据库中的数据,以维护最新数据

例如,如果一个订单请求是从一个服务员的手机发出的,那么新的订单将被发布到数据库中,我可以完成这项工作。厨师长需要得到新订单已创建的即时通知。此外,数据还需要反映在其他员工的电话和网站上

我所能想到的就是使用
setInterval
,但由于我以前从未做过类似的事情,我不确定这是不是正确的方法

组件

orders: Order[];

constructor(private orderService: OrderService) {
  setInterval(function() {
    this.orderService
      .getOrders()
      .subscribe(
      (orders: Order[]) => this.orders = orders,
      (error: Response) => console.log(error)
  )}, 3000);
}

placeanOrder(order) {
  this.orderService.postOrder(order);
}
getOrders() Observable<any>{
  this.http.get(...).map(...);
}

placeOrder(order) {
  this.http.post(...).map(...);
}
服务

orders: Order[];

constructor(private orderService: OrderService) {
  setInterval(function() {
    this.orderService
      .getOrders()
      .subscribe(
      (orders: Order[]) => this.orders = orders,
      (error: Response) => console.log(error)
  )}, 3000);
}

placeanOrder(order) {
  this.orderService.postOrder(order);
}
getOrders() Observable<any>{
  this.http.get(...).map(...);
}

placeOrder(order) {
  this.http.post(...).map(...);
}
getOrders()可观察{
this.http.get(…).map(…);
}
订单{
this.http.post(…).map(…);
}
当我尝试类似的操作时,我每秒都会在控制台上记录相同的错误

无法读取未定义的属性“getOrders”

  • 为什么我会出错
  • 如何将从服务器检索到的可观察json数据转换为接口数据类型(在本例中为
    Order
    )呢
  • 什么是更好的方法
  • 导致回调的错误使用!您必须使用箭头语法

    • 错误:
      setInterval(函数(){
    • 右:
      setInterval(()=>{
  • 只需使用正确的类型描述您的功能:

  • getOrders():可观察{
    
    不需要其他任何东西。属性名称必须相同(接口/json)

  • 可以使用计时器。“更好”可以是与服务器的永不关闭的连接,这样服务器就可以向您发送数据,而客户端不必轮询


  • 未指定属性。您可以使用websockets…它可以是轮询API(您现在正在执行的操作)或使用websockets从服务器端推送更新(更可取)。谢谢。我将查看websockets。好信息。谢谢。