У меня есть ионное приложение, над которым я работаю, используя базу данных 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
По какой-то причине идентификатор отображается как нулевой, хотя я и прохожу результирующее числовое значение.Есть идеи, что я здесь не так делаю?