Firebase/Angularfire:访问观测值的静态值

Firebase/Angularfire:访问观测值的静态值,firebase,firebase-realtime-database,angularfire,Firebase,Firebase Realtime Database,Angularfire,假设我有一个Firebase对象,其中包含一些ID的名称: people: { key1: {name: "Bob"}, key2: {name: "Sally"}, ... } 我创建了一个可观察的角度列表: this.people$ = this.angularFireDatabase.list('people'); 并将其作为 <span *ngFor="let person of people$ | async">Hello {{person.key}}<

假设我有一个Firebase对象,其中包含一些ID的名称:

people: {
  key1: {name: "Bob"},
  key2: {name: "Sally"},
  ...
}
我创建了一个可观察的角度列表:

this.people$ = this.angularFireDatabase.list('people');
并将其作为

<span *ngFor="let person of people$ | async">Hello {{person.key}}</span>
然后

但是,这需要我在
ngondestory
中跟踪订阅和取消订阅

Two:在可观察到的物体上使用
take

public create() {
  this.people$.take(1).subscribe(people =>
    this.people.push({name: "person " + (people.length + 1)});
  );
}
但这能可靠地获得可观测数据的当前值吗

Three:回到Angular数据库本身,进入引用和快照的世界,然后

public create() {
  this.people$.$ref.once("value").then(peopleSnapshot =>
    this.people.push({name: "person " + (peopleSnapshot.numChildren() + 1)});
}

这三种方法中有哪一种被认为是最佳实践,或者它们还有哪些优缺点?

对于静态变量,您可以使用src/environments/environment.ts文件夹保存json格式的静态信息,并使用
environment.myvar

在你的app.modules.ts中

imports: [ AngularFireModule.initializeApp(environment.firebase),

import { environment } from '../environments/environment';
public create() {
  this.people$.$ref.once("value").then(peopleSnapshot =>
    this.people.push({name: "person " + (peopleSnapshot.numChildren() + 1)});
}
imports: [ AngularFireModule.initializeApp(environment.firebase),

import { environment } from '../environments/environment';