【问题标题】:Having trouble retreiving data from firebase从 firebase 检索数据时遇到问题
【发布时间】:2019-12-24 10:46:52
【问题描述】:

我制作了一个应用程序,用户可以在其中注册和登录,当用户首次注册时,他/她的信息存储在 firebase 上。我的问题是当我试图调用它没有被检索的数据时,我在控制台日志中得到的是:-

FirebaseListObservable {_isScalar: false, $ref: Reference, source: FirebaseListObservable, operator: ObserveOnOperator}
$ref: Reference {repo: Repo, path: Path, queryParams_: QueryParams, orderByCalled_: false}
operator: ObserveOnOperator {scheduler: ZoneScheduler, delay: 0}
source: FirebaseListObservable {_isScalar: false, _subscribe: ƒ, $ref: Reference}
_isScalar: false
__proto__: Observable

我尝试更改要呼叫的孩子,但结果相同。

这是我的代码的一部分:-

constructor(public afdb: AngularFireDatabase, public afAuth: AngularFireAuth, public alrtCtrl:AlertController) {
    console.log('Hello FirebaseProvider Provider');
    afAuth.authState.subscribe(user => {
      if (user) {this.id = user.uid}
    });
  }

  addUser(user){
      firebase.database().ref('Users').child(user.UID).child('User Details').set(user);
      let alert = this.alrtCtrl.create({
        title:'Sign Up',
        subTitle:'You have signed up successfully',
        buttons:['OK']
      })
      alert.present();
  }

 getUser() {
    return this.afdb.list('/Users/'+this.id+'/User Details/');
 }

我希望将数据返回并存储在不同 ts 文件中的变量中:-

constructor(public firebase: FirebaseProvider,public afAuth: AngularFireAuth,public navCtrl: NavController, public auth: AuthProvider) {
    this.user = this.firebase.getUser();
    console.log(this.user);
  }

但相反,我一直得到我之前在控制台日志中显示的结果,而不是实际数据。

【问题讨论】:

  • 我认为您实际上并没有获取数据,而只是获取了可观察到的数据
  • 如果你不介意可以给我一个简单的解释吗?因为我对应用程序设计和 Ionic 比较陌生。
  • 我看到有人推荐使用 valueChanges(),但这对我不起作用,我收到此错误:imgur.com/a/989zsRc
  • observable 上没有 valueChanges。正如我所说,这里的返回类型是可观察的,因此您遇到了这个问题。你能看看这个链接github.com/angular/angularfire2/blob/master/docs/rtdb/…
  • 您好,我已经添加了答案,您可以检查一下吗?

标签: typescript firebase firebase-realtime-database angularfire2


【解决方案1】:

如果没有任何效果,你可以试试下面的代码吗?

this.itemsRef = db.list('messages');
// Use snapshotChanges().map() to store the key
this.items = this.itemsRef.snapshotChanges().map(changes => {
  return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
});

【讨论】:

  • 我确实尝试了代码,但我得到了一个错误:- this.itemsRef.snapshotChanges 不是函数
  • 你确实用你想要的东西替换了所有东西,对吧?
  • 这是我当前的功能我不确定是否还有其他需要更改的地方 getUser() { this.itemsRef = this.afdb.list('/Users/'+this.id+' /用户详细信息/'); // 使用 snapshotChanges().map() 存储 key this.items = this.itemsRef.snapshotChanges().map(changes => { return changes.map(c => ({ key: c.payload.key, ...c.payload.val() })); }); }
  • 为什么最后用User Details/一个/?
  • getUser() { this.itemsRef = this.afdb.list('/Users/'+this.id+'/User Details'); this.items = this.itemsRef.snapshotChanges().map(changes => { return changes.map(c => c.data) }) }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2016-05-24
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多