Firebase将数字读取为'null'



我有一个使用Firebase实时数据库的离子应用程序。从本质上讲,我使用 firebase 对用户进行身份验证,并将用户选择输入存储在 firebase 数组下。我现在还在玩火碱,昨天它工作得很好,但是,突然今天,火基地似乎根据chrome的控制台将我的"id"值读取为"null"。

代码引用了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();
}
}

该代码还引用了firebase-database.ts下的FirebaseDatabaseProvicer:

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}

但是,今天,由于某种原因,我收到控制台错误:

错误:引用集失败:第一个参数包含未定义 属性 'users.uid.notes.datetimestamp.diagnosis'

从本质上讲,我将 uid 替换为用户 id 字符串,并将日期时间戳替换为上述所有内容中的实际数字结果,以便于理解。

控制台显示:

{id:空,诊断:"甲状腺功能减退"}

但是,当我展开该值时,我看到以下内容: 诊断:"甲状腺功能减退" 编号: 1539049001838

出于某种原因,即使我正在传递结果数值,id 也会被报告为 null。任何想法我在这里做错了什么?

没关系,我想通了。我的参数玩得不好。我得到以下数组:

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

删除了参数并将this.data.id = new Date().getTime();添加到CrudFirebaseDetailPage,它似乎工作正常。

最新更新