首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularFire2检索数据快照

AngularFire2检索数据快照
EN

Stack Overflow用户
提问于 2017-06-27 17:10:25
回答 1查看 8.4K关注 0票数 1

现在,我正在使用在文档中描述方法展开数据。然而,这些文件指出:

AngularFire2默认对Firebase DataSnapshot进行包装,但您可以通过指定preserveSnapshot选项将数据作为原始快照获取。

我如何能够访问“默认”解包装功能(读:访问item的元素),而无需手动打开数据快照?

我来自Firebase的数据如下所示:

代码语言:javascript
复制
{
  testObj : {
    firstName: "beckah",
    lastName: "s"
  }
}

我的代码(起作用)是:

代码语言:javascript
复制
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { AngularFireDatabase, FirebaseObjectObservable } from 'angularfire2/database';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  item: FirebaseObjectObservable<any>;
  constructor( public navCtrl: NavController,
              public db: AngularFireDatabase ) {
    this.item = db.object('/testObj', { preserveSnapshot: true });
    this.item.subscribe(snapshot => {
      console.log(snapshot.val())
    });
  }
}

哪种输出

代码语言:javascript
复制
Object {firstName: "beckah", lastName: "s"}

如果不像文档状态那样手动展开快照,我如何才能完成完全相同的事情(console.log,我的item对象)?

有什么this.item.get("firstName")方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 18:04:08

使用AngularFire,您根本不需要担心快照。只需订阅AngularObjectObservable,它就会为您提供对象。

angularfire2版本4

代码语言:javascript
复制
this.item$ = this.db.object('/item').subscribe(item => console.log(item));

angularfire2版本5

代码语言:javascript
复制
this.item$ = this.db.object<Item>('/item').valueChanges().subscribe(item => console.log(item));

您不应该在构造函数中订阅。在onNgInit中订阅。然后确保在onNgDestroy中取消订阅以避免内存泄漏。

在许多情况下,您根本不需要订阅--让角在模板中使用async管道来完成它:

angularfire2版本4

代码语言:javascript
复制
// component
public item$: FirebaseObjectObservable<Item>;

ngOnInit() {
  this.item$ = this.db.object('/item');
}

// template
<div *ngIf="item$ | async as item">
  First name is {{item?.firstName}}.
</div>

angularfire2版本5

代码语言:javascript
复制
// component
public item$: Observable<Item>;

ngOnInit() {
  this.item$ = this.db.object<Item>('/item').valueChanges();
}

// template
<div *ngIf="item$ | async as item">
  First name is {{ item?.firstName }}
</div>
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44786135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档