【问题标题】:Firebase is not uplodaing data to the databaseFirebase 未将数据上传到数据库
【发布时间】:2018-07-06 02:37:55
【问题描述】:

我正在开发一个 Angular+Firebase 项目。我正在尝试将我的数据上传到 firebase 数据库。但是我在做的时候遇到了错误。下面是我的 FirebaseService 代码。

import { AngularFirestore } from 'angularfire2/firestore';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { AngularFireDatabaseModule, AngularFireDatabase } from 'angularfire2/database';
import { AngularFireObject, AngularFireList } from 'angularfire2/database';
import * as firebase from 'firebase';

@Injectable()
export class FirebaseService {
  listings ;
  listing: Observable<any[]>;
  folder: any;

  constructor(private db: AngularFireDatabase) {
    this.folder = 'listingimages';
   }

  getListings(){

      this.listings = this.db.list('/listings').snapshotChanges().map(actions => {
        return actions.map(action => ({ key: action.key, ...action.payload.val() }));
      })
      return this.listings;
  }

  getListingDetails(id){
    this.listing = this.db.object('/listings/'+id).valueChanges() as Observable<Listing[]>;
    return this.listing;

  }

  addListing(listing){
    //Create Root Reference     
        let storageRef = firebase.storage().ref();
    for(let selectedFile of [(<HTMLInputElement>document.getElementById('image')).files[0]]){
      let path = `/${this.folder}/${selectedFile.name}`;
      let iRef = storageRef.child(path);
      iRef.put(selectedFile).then((snapshot) => {
        listing.image = selectedFile.name;
        listing.path = path;
        console.log(this.listings);
        return this.listings.push(listing);

        });
    }
  }

}

interface Listing{
    $key?: string;
    title?: string;
    type?: string;
    image?: string;
    city?: string;
    owner?: string;
    bedrooms?: string
}

控制台出现的错误截图如下:

我不明白为什么它显示未定义的错误?

【问题讨论】:

  • listingsundefined... 初始化它。
  • 谢谢。我试图初始化它,但现在出现了一个新错误。 Observable 不能分配给 'any[]'。
  • 你能把:“this.listing = this.db.object('/listings/'+id).valueChanges() as Observable”改成:“this.listing = this.db.object('/listings/'+id).valueChanges() as Listing[]"?

标签: angular firebase firebase-realtime-database angular2-services angularfire2


【解决方案1】:

this.listings 仅在您的 getListingsgetListingDetails 方法中分配。但是您在addListing 中访问它。可能发生的情况是您在调用其他方法之一之前调用了addListing

如果您想以任何顺序调用这些方法,您将不得不找到另一种不依赖于之前发生的其他事情的方式来写入数据库。

【讨论】:

  • 谢谢道格。我认为“列表”属性需要先初始化。我试图这样做,但出现了一个新错误:Observable 不可分配给'any[]'。你能帮忙吗?我应该如何初始化它?
猜你喜欢
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 2019-06-07
  • 2018-11-08
  • 2021-11-07
  • 1970-01-01
相关资源
最近更新 更多