如何将密钥添加到添加到 angularfire 2 版本 5 中的节点的对象
How to add the key to an object added to a node in angularfire 2 version 5
我曾经能够像这样在 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);
}
因为我得到一个错误
error TS2339: Property 'push' does not exist on type 'Observable'<'any'>'
,我考虑重构为:
addMatchToDb(match: any){
let ref = this.db.object('matches/');
let matchId = ref.update(match);
}
但现在我无法将密钥添加为 ID 或时间戳。对版本 5 的新变化有什么建议吗?
更新:关于this.matches的一些细节:
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?
}
我不太确定,但你的推送必须在 db.list<Match>('/matches')
而不是 db.list<Match>('/matches').valueChanges();
上完成
因此您可以将类型 AngularFireList 添加到您的变量 db.list<Match>('/matches')
并获得 push/update/remove 方法
我曾经能够像这样在 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);
}
因为我得到一个错误
error TS2339: Property 'push' does not exist on type 'Observable'<'any'>'
,我考虑重构为:
addMatchToDb(match: any){
let ref = this.db.object('matches/');
let matchId = ref.update(match);
}
但现在我无法将密钥添加为 ID 或时间戳。对版本 5 的新变化有什么建议吗?
更新:关于this.matches的一些细节:
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?
}
我不太确定,但你的推送必须在 db.list<Match>('/matches')
而不是 db.list<Match>('/matches').valueChanges();
因此您可以将类型 AngularFireList 添加到您的变量 db.list<Match>('/matches')
并获得 push/update/remove 方法