【问题标题】:How to make the data only available for one time on firebase如何使数据仅在 Firebase 上可用一次
【发布时间】:2018-05-20 08:15:54
【问题描述】:

我想制作一个只能由一个用户申请一天的报告,因此用户不能在同一日期发布双重记录。 这是代码

// 我使用 ionic 和 firebase

这是html的代码

<ion-header>

  <ion-navbar>
    <ion-title>laporanharian</ion-title>
  </ion-navbar>

</ion-header>


<ion-content padding>
    <ion-list>
          <ion-datetime displayFormat="MMM DD YY" [(ngModel)]="myDate" #mydate></ion-datetime>
          
          <ion-item>
            <ion-label floating>Porsi Karbohidrat</ion-label>
            <ion-input type="number" #porsiKarbohidrat></ion-input>
          </ion-item>
        
          <ion-item>
            <ion-label floating>Porsi Protein Hewani</ion-label>
            <ion-input type="number" #porsiProteinHewani></ion-input>
          </ion-item>
        
          <ion-item>
            <ion-label floating>Porsi Protein Nabati</ion-label>
            <ion-input type="number" #porsiProteinNabati></ion-input>
          </ion-item>

          <ion-item>
              <ion-label floating>Porsi Lemak</ion-label>
              <ion-input type="number" #porsiLemak></ion-input>
            </ion-item>
    
    </ion-list>
    <button ion-button full (click)="submitLaporan()">Submit</button>

</ion-content>

这是 ts 的代码

import { Component, ViewChild } from '@angular/core';
import { IonicPage, NavController, NavParams,AlertController } from 'ionic-angular';
import { AngularFireAuth } from 'angularfire2/auth';
import { AngularFireDatabase} from 'angularfire2/database';

/**
 * Generated class for the LaporanharianPage page.
 *
 * See http://ionicframework.com/docs/components/#navigation for more info
 * on Ionic pages and navigation.
 */

@Component({
  selector: 'page-laporanharian',
  templateUrl: 'laporanharian.html',
})
export class LaporanharianPage {

  
  myDate: String = new Date().toISOString();
  id : string;

  constructor(private alertctrl :AlertController ,private db : AngularFireDatabase,public fire :AngularFireAuth,public navCtrl: NavController, public navParams: NavParams) {
  }

  @ViewChild('mydate') mydate;
  @ViewChild('porsiKarbohidrat') porsiKarbohidrat;
  @ViewChild('porsiProteinHewani') porsiProteinHewani;
  @ViewChild('porsiProteinNabati') porsiProteinNabati;
  @ViewChild('porsiLemak') porsiLemak;

  ionViewDidLoad() {
    console.log('ionViewDidLoad LaporanharianPage');
  }
  alert(message : string)
  {
    this.alertctrl.create({
      title: 'info !',
      subTitle: message,
      buttons: ['OK']
    }).present();
  }

  submitLaporan()
  {
    
    this.id = this.fire.auth.currentUser.uid;
    this.db.list('/laporan/'+this.id).push({
      mydate : this.mydate.value,
      porsiKarbohidrat : this.porsiKarbohidrat.value,
      porsiProteinHewani : this.porsiProteinHewani.value,
      porsiProteinNabati : this.porsiProteinNabati.value,
      porsiLemak : this.porsiLemak.value,
    })

    this.alert("Sukses")
    }

    

}

我只是使用标准代码将数据推送到 Firebase。 使用此代码,我可以在同一天上传双重报告。

【问题讨论】:

  • 将日期保存在数据库中,如果今天>此日期,请在服务器端检查
  • 怎么做?

标签: angular typescript firebase firebase-realtime-database angularfire


【解决方案1】:

您可以在 Firebase 中查看更新时间超过 1 天(以毫秒为单位)的现有报告。如果有融洽的关系,允许插入一个新的。

从 Firebase 过滤报告的方法:

const yesterday = Date.now() - (24 * 60 * 60 * 1000);

db
  .list<Report>('/laporan/' + this.id)
  .valueChanges()
  .map(reports => reports.filter(report => report.mydate > yesterday))
  .subscribe(reports => {
    if (reports.length === 0) {
      // insert report in Firebase
    }

    console.log(reports);
});

注意:mydate = 自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的毫秒数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2020-08-25
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多