我试图编写在子字段内推送时生成的新密钥。
是否可以在同一个写入事务上写入?像下面的东西......
const evt = this.angularfire2Service.afDb.list('/path/');
evt.push({
id : <<<< key generated on push >>>>>
title: newdata.title,
}).then( newrec => {
console.log('chave = ', newrec.key)
});
作为解决方法,我可以写为:
.then( newrec => {
console.log('chave = ', e.key);
this.angularfire2Service.afDb.object('/path/+newrec.key).update({
id: newrec.key
});
});
答案 0 :(得分:1)
我建议使用firebase sdk。 实际上,使用.push()时已生成密钥 即。
import * as firebase from 'firebase';
然后
const ref = firebase.database().ref('/path').push();
ref.set({
id: ref.key,
title: newdata.title
});
答案 1 :(得分:1)
使用angularfire2,在event.service.ts
上,您需要...
import { AngularFireDatabase } from 'angularfire2/database';
@Injectable()
export class EventService {
userKey: string;
constructor(private _fbApp: AngularFireDatabase) {}
addEvent(event) {
// creating key without pushing data
this.eventKey = this._fbApp.database.ref('/events').push().key;
// adding the key as a property to the object you will push
event.uid = this.eventKey;
// creating child node with same key and pushing data
this._fbApp.database().ref('/events').child(this.eventKey).set(event);
}
在event.component.ts
...
addEvent({ value, valid }: { value: Event; valid: boolean }) {
this._eventService.addEvent(value);
this._router.navigate(['/']);
}
如果您有用于验证对象的界面,请注意{value: Event;
。
此代码应在您推送数据之前创建节点密钥,将该密钥存储在变量中,并立即将该密钥作为要推送到节点的对象中的属性。请注意.child(this.eventKey)
正在使用刚刚创建的密钥作为关键节点。
希望这有帮助!!!