【问题标题】:Querying subset from angularfire2从 angularfire2 查询子集
【发布时间】:2017-01-30 04:34:43
【问题描述】:

我需要从 firebase 列表中获取一个子集。假设我有两组:

set1 = {
    dog:true,
    cat:true,
    snake:true,
    bull:true
}

set2 = {
    dog:true,
    cat:true
}

我需要的是获取“在set1中,但不在set2中”,在这种情况下它会返回:

setresult = {
    snake:true,
    bull:true
}

我试图用地图来实现这一点:

this.setresult = this.af.database.list('/set2/').map((animals) => {
        return animals.map((animal) => {
            if (auth.uid == _user.$key || af.database.object('set2/' + animal.$key) == null) {}
            else {

                return af.database.object('set1/' + animal.$key);
            }
        })
    })

但我最终得到一个包含空值的列表,我只需要结果集。

提前致谢。

【问题讨论】:

    标签: firebase firebase-realtime-database angularfire2


    【解决方案1】:

    您可以使用combineLatest 操作符组成一个可观察对象,该对象发出一个对象,该对象包含来自set1 而不在set2 中的键/值:

    import * as Rx from "rxjs/Rx";
    
    let set = Rx.Observable.combineLatest(
    
        // Combine the latest values from set1 and set2
        // using AngularFire2 object observables.
    
        this.af.database.object('/set1/'),
        this.af.database.object('/set2/'),
    
        // Use the operator's project function to emit an
        // object containing the required values.
    
        (set1, set2) => {
            let result = {};
            Object.keys(set1).forEach((key) => {
                if (!set2[key]) {
                    result[key] = set1[key];
                }
            });
            return result;
        }
    );
    
    set.subscribe((set) => { console.log(set); });
    

    【讨论】:

    • ,该示例工作正常,但由于某种原因,我无法将结果呈现给 carant,视图(使用 ngFor 和异步管道)使用:<li *ngFor="let item of animallist | async" >{{item.name}}</li> 我得到了 找不到不同支持“对象”类型的对象“[对象对象]”。 NgFor 只支持绑定到 Arrays 等 Iterables。
    • 如果答案中的示例有效,但您在视图中显示结果时遇到问题,最好创建另一个问题 - 包括组件、模板和组合可观察的。别人帮助你会更容易。尤其是你已经接受了这个答案。
    • 不用担心。只需包括相关部分。不需要整个历史。如果出于某种原因,您认为历史很重要,只需包含指向此问题的链接以及新问题的相关代码 sn-ps。保持简单明了,您将提高获得及时准确答案的机会。
    • 如果你有时间可以看看link,再来一次@cartant
    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2017-03-11
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多