如何在angularfire 2版本5中将密钥添加到添加到节点的对象

时间:2018-07-08 05:58:27

标签: javascript angular firebase firebase-realtime-database angularfire2

我曾经能够像这样在angularfire2 v.4.x中将密钥添加到对象本身:

addMatchToDb(match: any){
    let ref = this.db.object('matches/');
    let matchId = this.matches.push(match).key;
    let updates = {};
    updates['/matches/' + matchId + '/id'] = matchId;
    updates['/matches/' + matchId + '/matchCreated'] = firebase.database.ServerValue.TIMESTAMP;
    firebase.database().ref().update(updates);
  }

自从出现错误

  

错误TS2339:类型'Observable'<'any'>'

上没有属性'push'

,我考虑过重构为:

addMatchToDb(match: any){
    let ref = this.db.object('matches/');
    let matchId = ref.update(match);
  }

但是现在我无法将密钥添加为ID或时间戳。鉴于版本5的新变化有何建议?

更新:有关此匹配项的一些详细信息:

export class DatabaseService {
  matches:Observable<any>;
  weightClasses:Observable<any>;
  giRanks:Observable<any>;
  noGiRanks:Observable<any>;
  ageClasses:Observable<any>;
  users:Observable<any>;
  currentUser:Observable<any>;
  moves:Observable<any>;
  retrievedMatch:Observable<any>;

  constructor(private db: AngularFireDatabase, private textTransformationService: TextTransformationService) {
    this.matches = db.list<Match>('/matches').valueChanges();
    this.weightClasses = db.list<string>('/weightClasses').valueChanges();
    this.giRanks = db.list<string>('/giRanks').valueChanges();
    this.noGiRanks = db.list<string>('/noGiRanks').valueChanges();
    this.ageClasses = db.list<string>('/ageClasses').valueChanges();
    this.users = db.list<User>('/users').valueChanges();
    this.moves = db.list<string>('/moves').valueChanges(); //TODO maybe JSON?
  }

1 个答案:

答案 0 :(得分:1)

我不在,但您的推送必须在db.list<Match>('/matches')而不是db.list<Match>('/matches').valueChanges();

上完成

因此,您可以将AngularFireList类型添加到变量db.list<Match>('/matches')中,并获取push / update / remove方法