Firebase читает число как «ноль» - PullRequest
0 голосов
/ 09 октября 2018

У меня есть ионное приложение, над которым я работаю, используя базу данных Firebase в реальном времени.По сути, я аутентифицирую пользователей, использующих Firebase, а также храню ввод выбора пользователя под массивами Firebase.Я все еще играю с firebase в данный момент, и вчера он работал нормально, однако сегодня, внезапно, firebase, кажется, считывает мое значение 'id' как 'нулевое' в соответствии с консолью chrome.

Кодссылается на CrudFirebaseDetailPage и .ts здесь:

import { Component, ChangeDetectorRef } from '@angular/core';
import { IonicPage, NavController, ViewController, NavParams } from 'ionic-angular';
import { FormGroup, FormBuilder, FormControl, Validators } from '@angular/forms';
import { LoadingProvider, FirebaseDatabaseProvider } from '../../../../providers/providers';
import { IonicSelectableComponent } from 'ionic-selectable';
import { DiagnosisService } from '../../services';
import { Diagnosis } from '../../types';

@IonicPage()
@Component({
    selector: 'page-crud-firebase-detail',
    templateUrl: 'crud-firebase-detail.html',
})
export class CrudFirebaseDetailPage {
    private form: FormGroup;
    diagnosisControl: FormControl;
    diagnoses: Diagnosis[];
    action: number;
    data: any = { diagnosis : ''};
    items: any;

    constructor(public nav: NavController, private view: ViewController, private loading: LoadingProvider, private formBuilder: FormBuilder, private diagnosisService: DiagnosisService, public params: NavParams, public crud: FirebaseDatabaseProvider) {
        this.action = params.data.action;
        this.data = params.data && params.data.data || this.data;
        this.diagnoses = this.diagnosisService.getDiagnoses();
        this.diagnosisControl = this.formBuilder.control(this.diagnoses[0],
            Validators.required);
        this.form = this.formBuilder.group({
            id: [this.data && this.data.id],
            diagnosis: [this.data && this.diagnosisControl]
        });
    }

    diagnosisChange(event: {
        component: IonicSelectableComponent,
        value: any
    }) {
        console.log(event.value);
    }

    submit() {
        this.loading.present();
        this.crud.save(this.form.value);
        this.loading.dismiss();
        this.close();
    }

    close() {
        this.view.dismiss();
    }

}

Код также имеет ссылки на FirebaseDatabaseProvicer в firebase-database.ts:

import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';
import { AngularFireAuth } from 'angularfire2/auth';

@Injectable()
export class FirebaseDatabaseProvider {

    user: any = {};

  itemsRef:AngularFireList<any>;

    constructor(public afd: AngularFireDatabase,
        public afAuth: AngularFireAuth) {
        this.afAuth.authState.subscribe((res) => {
            if (res) this.user = res;
            this.itemsRef = this.afd.list(`users/${this.user.uid}/notes/`);
        })
  }

  get read() {
   return this.itemsRef;
  }

  save(datas) {
    console.log(datas);
    if (datas.id) {
      let tmp = datas.id; 
      console.log(datas);
      this.itemsRef.update(String(tmp), datas);
    }
    else {
      let id = new Date().getTime();
        datas.id = id;
      this.itemsRef.set(String(id),{
        id : id,
        diagnosis : datas.diagnosisControl
      });
    }
  }

  delete(id) {
    this.itemsRef.remove(String(id));
  }

}

По существу, когда новые данные добавляются всерверная часть firebase, результат массива, который я ожидал и получал вчера, был:

users
--uid
----notes
------datetimestamp
--------id: datetimestamp
--------diagnosis: {the diagnosis chosen by user}

Однако сегодня по какой-то причине я получаю ошибку консоли:

Ошибка: Reference.set не удалось: первый аргумент содержит неопределенное значение в свойстве 'users.uid.notes.datetimestamp.diagnosis'

По сути, я заменил uid на строку с идентификатором пользователя, а дату и время - на фактическую цифрудля облегчения понимания приведите все вышеперечисленное.

Консоль показывает:

{id: null, диагноз: "Гипотиреоз"}

However, когда я раскрываю значение, я вижу следующее: диагноз: «гипотиреоз» id: 1539049001838

По какой-то причине идентификатор отображается как нулевой, хотя я и прохожу результирующее числовое значение.Есть идеи, что я здесь не так делаю?

1 Ответ

0 голосов
/ 09 октября 2018

Неважно, я понял это.Мои параметры не играли хорошо.Я получил следующий массив:

users
--uid
----notes
------undefined
--------id: datetimestamp
--------diagnosis: {the diagnosis chosen by user}

Удалил параметры и добавил this.data.id = new Date().getTime(); в CrudFirebaseDetailPage, и, похоже, он работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...