2017-07-02 67 views
0

我想从firebase返回所有符合今天日期的预订。Firebase查询得到今天的预订传回阵列

我在我的html中使用* ngFor命令来打印出所有返回的订单。

在firebase数据库中,我保存了7个预订。 7个中有2个是今天的日期。所以全部7个都在屏幕上打印出来。但是,当我点击我的按钮来运行以下功能时,我只想显示今天的预约日期。

todayBookings() { 

    this.ordersData = this.af.list('/orders', { 

     query: { 
      orderByChild: 'start', 
      // equalTo: today 
     } 
    }); 
    this.ordersData.subscribe((res) => { 
     this.orders = res; 
    }); 

    this.orders.forEach(order => { 

     var d = new Date(); 
     var curr_date = ("0" + (d.getDate() + 0)).slice(-2); 
     var curr_month = ("0" + (d.getMonth() + 1)).slice(-2) 
     var curr_year = d.getFullYear(); 
     // get today's date 
     var today = curr_year + "-" + curr_month + "-" + curr_date; 
     // get date of booking 
     var dateOfBooking = order.start.substr(0, 10); 

     if (dateOfBooking == today) { 
      this.todaysOrders = order; 
      var index = this.orders.indexOf(order, 0); 
      if (index > -1) { 
       this.orders.splice(index, 1); 
      } 
      // console.log(this.orders); 
      // console.log(this.todaysOrders); 

     } 

    }); 

    this.orders = this.todaysOrders 
    console.log(this.orders); 
} 

当我在控制台登录以下内容:console.log(this.todaysOrders);

我在控制台中看到2个预约今天:

screenshot of console

不幸的是,我不知道现在该怎么走this.todaysOrders并将其传递回this.orders。

我尝试以下:

this.orders.push(this.todaysOrders);

但它带回了所有的条目,并附上今天的预订列表,而不是7条返回带来了9.(所有预订+今天的2日预订)。

订单数据库

orders 
-Ko2a0zwYPQc-ocfJ1cF 
    createdAt: 1499003887000 
    orderId: 34681 
    partySize: "1" 
    requirements: "none" 
    start: "2017-07-02T15:00:44+01:00" 
    status: "Accepted" 
    type: "tablebooking" 
    + userDetails 
    userId: "CQbDG6H8ENStlZiaNOGNsvbw2GL2" 

    -Ko2ay19E7b17UhZ9HAf 
    -Ko2pmavUZNTKdsr0pv6 
    -Ko2t6cm35uOtiROeghG 
    -Ko2tn6iRmkG7Y-OfAcJ 
    -Ko2u5FrD5ZnIphL9Vno 
    -KoBtilv2-dj-XmQSQBf 

这是全班同学。我已经删除了我用于页面上其他内容的其他功能。

import { Component, OnInit, AfterViewInit, ElementRef, ViewChild, OnDestroy, OnChanges } from '@angular/core'; 
import { AngularFireDatabase, FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2/database'; 
import { Router, ActivatedRoute } from "@angular/router"; 
import { NgForm } from '@angular/forms'; 
import { AngularFireAuth } from 'angularfire2/auth'; 
import * as firebase from 'firebase'; 
import { ToastrService } from 'toastr-ng2'; 
import * as moment from 'moment'; 


@Component({ 
    selector: 'app-calendar', 
    templateUrl: './calendar.component.html', 
    styleUrls: ['./calendar.component.scss'] 
}) 

export class CalendarComponent implements OnInit, AfterViewInit, OnChanges { 



    order: Array<any>; 
    orders: Array<any>; 
    ordersData: FirebaseListObservable<any>; 

    todaysOrders: Array<any>; 

    color: any; 
    orderId: any; 


    @ViewChild('fullcalendar') fullcalendar: ElementRef; 


    constructor(public af: AngularFireDatabase, public toastr: ToastrService, public router: Router, public authentication: AngularFireAuth) { 


     this.ordersData = af.list('/orders', { 
      query: { 
       orderByChild: 'start', 
      } 
     }); 
     this.ordersData.subscribe((res) => { 
      this.orders = res; 
     }); 


    } 




    //Get Todays Bookings 
    todayBookings() { 

     this.ordersData = this.af.list('/orders', { 

      query: { 
       orderByChild: 'start', 
       // equalTo: today 
      } 
     }); 
     this.ordersData.subscribe((res) => { 
      this.orders = res; 
     }); 

     this.orders.forEach(order => { 

      var d = new Date(); 
      var curr_date = ("0" + (d.getDate() + 0)).slice(-2); 
      var curr_month = ("0" + (d.getMonth() + 1)).slice(-2) 
      var curr_year = d.getFullYear(); 
      // get today's date 
      var today = curr_year + "-" + curr_month + "-" + curr_date; 
      // get date of booking 
      var dateOfBooking = order.start.substr(0, 10); 

      if (dateOfBooking == today) { 
       this.todaysOrders = order; 
       var index = this.orders.indexOf(order, 0); 
       if (index > -1) { 
        this.orders.splice(index, 1); 
       } 
       // console.log(this.orders); 
       console.log(this.todaysOrders); 

      } 

     }); 

     // this.orders = this.todaysOrders 
     // console.log(this.orders); 
    } 





} 
+0

我的数据库是火力不知道你的意思是哥们 –

+0

向我们展示什么是你的数据库是什么,布局/结构 – theblindprophet

+0

更新主贴:) –

回答

0

您可以从orders阵列中删除今天的每个订单。

类似:

if (dateOfBooking == today) { 
    this.todaysOrders = order; 
    var index = this.orders.indexOf(order, 0); 
    if (index > -1) { 
    this.orders.splice(index, 1); 
    } 
    console.log(this.todaysOrders); 
    console.log(this.orders); 
} 
+0

谢谢你的友好建议@然而,在控制台中,我看到这消除了今天的订单,我不想删除它们,这是我需要显示的订单,我想删除所有不是今天的订单。 –

+0

也许像'this.orders = this.todaysOrders'之后的'forEach'? – Lilrom

+0

那也行不通,我很害怕。当我console.log(this.orders)我得到的数组对象不是今天预订。当我console.log(this.todaysOrders)我回来今天的订单,但作为单个对象不是我需要的对象数组。我还在foreach之后添加了this.orders = this.todaysOrders,但在控制台中出现错误:**错误:试图区分'[object Object]'错误。只有数组和迭代是允许的**我用更多的代码更新了我的问题。 –