【问题标题】:Angularfire2 - retrieve added objectAngularfire2 - 检索添加的对象
【发布时间】:2017-11-23 01:51:54
【问题描述】:

我正在尝试找到一个使用 angularfire2 的完整示例,但我找不到。一些示例将 anugalrfire2 与原生 firebase 或旧版本的 angularfire 结合使用。

我有一些关于如何使用 angularfire2/database 创建两个具有依赖关系的文档的问题。

例子

数据库:

locations { 
 country: string
 lat: number
 long: number
 .....
}

stores {
 name: string
 locationID: string
 description: string
  .....
}

因此,如果可能的话,试图找到一种方法在原子创建中创建一个location 和一个store,但没有运气。然后,我可以更新newStore.locationID = newLocation.id

import { AngularFireDatabase } from 'angularfire2/database';
....
constructor(private db: AngularFireDatabase) { }

createStore(ownerID: number, storeData: Store, locationData: Location) {        

    let promises = {
        newStore: this.db.object('/stores').add(storeData),
        newLocation: this.db.object('/locations').add(locationData),
    }

    Observable.forkJoin(promises).subscribe((r) => {
        newStore.userID = ownerID;
        newStore.workingRegionID = newLocation.key;
    });
}

我也尝试创建一个空的商店(使用 AngularFire2),但我没有找到方法来做到这一点。 (收到所有类型的错误)

import { AngularFireDatabase } from 'angularfire2/database';
....
constructor(private db: AngularFireDatabase) { }

createStore(ownerID: number, storeData: Store, locationData: Location) {

    let newStoreKey = this.db.object('/stores').push().key;
    let newLocationKey = this.db.object('/locations').push().key;

    storeData.userID = ownerID;
    storeData.workingRegionID = newLocationKey;

    let sets = {};
    sets['/stores/' + newStoreKey] = Store;
    sets['/locations/' + newLocationKey] = Location;

    return Observable.fromPromise(this.db.set(sets));
}

最后,我有一些关于原子性和规则的问题。

  1. 是否需要使用 Firebase 的事务来使其具有原子性?
  2. AngularFire2 从 Firebase 检索规则?如果没有,我可以离线设置/更新信息吗?当我上线时,Angular 会触发写入异常吗?我应该如何在我的代码中处理这个问题?

【问题讨论】:

    标签: angular firebase angularfire2


    【解决方案1】:

    我离一个有效的答案很近。这就是我在storeService 中得到的内容

    import { AngularFireDatabase } from 'angularfire2/database';
    ....
    constructor(private db: AngularFireDatabase) { }
    
    createStore(ownerID: string, storeData: Store, locationData: Location) {
        let newStore = this.db.list('/stores').push(undefined);
        let newStoreKey = newStore.key;
        let newLocation = this.db.list('/stores').push(undefined);
        let newLocationKey = newLocation.key;
        storeData.ownerID = ownerID;
        storeData.workingRegionID = newLocationKey;
        storeData.name = storeData.name.toLowerCase();
    
        let tasks = {};
        tasks["/stores/" + newStoreKey] = storeData;
        tasks["/locations/" + newLocationKey] = locationData;
    
        return this.db.object('/').update(tasks);
    }
    

    回答我自己的问题。

    问:我是否需要使用 Firebase 的 Transactions 来使其具有原子性?

    答:不,您可以使用 AngularFire2 使用 multi-location update。好答案here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多