使用angularfire2,如何编写作为字段子项生成的新密钥

时间:2017-05-26 01:26:19

标签: angular key push angularfire2

我试图编写在子字段内推送时生成的新密钥。

是否可以在同一个写入事务上写入?像下面的东西......

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
     });
});

2 个答案:

答案 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)正在使用刚刚创建的密钥作为关键节点。

希望这有帮助!!!