【问题标题】:Grabbing Keys with Firebase使用 Firebase 获取密钥
【发布时间】:2017-05-09 02:38:36
【问题描述】:

我目前正在为一个类创建一个使用 ionic2 和 firebase 的应用程序,但我遇到了一个问题。 我没有发布代码,因为我没有与该问题足够相关的任何内容。

在我的数据库中,我有一个人们可以创建的“组”。我需要“组”才能存储用户列表。我目前这样做的方式是,用户将单击 addGroup 按钮,只需键入组名,即可将 currentUser 添加到该组中的用户列表中。 (是的,我知道以后需要密码或类似的东西,人们显然不应该只是能够通过组名加入)

*组的名称都会不同,所以我应该能够用它查询数据库并获得一个参考点。 问题是我不知道如何正确查询数据库并获取我想要的组对象的键值。

我一直在查找,但找不到获取对象键的简单方法。我觉得这是一个愚蠢的问题,但是我不熟悉 typescript、firebase 和 ionic2,所以我对一切都很迷茫。

【问题讨论】:

    标签: firebase firebase-realtime-database ionic2 angularfire2


    【解决方案1】:

    在评论中回答问题。 你可以这样查询数据库

    this.group_val:any="group1"
    let group=db.list('/groups', {
      query: {
        orderByChild: GroupName, //here specify the name of field in groups
        equalTo: this.group_val  //here specify the value u want to search
      }
    });
    
    group.subscribe(grp=> {
              //you can use the grup object here
    })
    

    【讨论】:

    • 如果我添加:limittofirst: 1 它应该只得到一个元素,对吗?如何获取列表中那个元素的键?
    【解决方案2】:

    首先,定义您的数据库结构。以下可能是最好的:

    groups
      <first group> (Firebase-generated ID)
        name: "Cat lovers"
        users: 
          user1ID: true
          user2ID: true
      <second group>
        ...
    

    我假设当用户点击他想加入的组时,您知道组 ID。例如,它可能是selectoptionvalue

    获取组列表:

    groups$ = this.angularFireDatabase.list('groups');
    

    要将组列表填充到选择中:

    <select>
      <option *ngFor="let group of groups$ | async" [value]="group.$key">
        {{group.name}}
      </option>
    </select>
    

    要创建一个新组:

    groups$.push({name: "Dog lovers"})
    

    选择(下拉)将自行更新。

    将用户添加到组:

    addUserToGroup(groupId, userId) {
      this.angularFireDatabase.list(`groups/${groupID}/users`).update(userID, true);
    }
    

    根据名称查找组:

    // Define the shape of a group for better type checking.
    interface Group { name: string; users: {[userId: string]: boolean;}; }
    
    // Keep local list of groups.
    groups$: FirebaseListObservable<Group>;
    groups: Group[];
    
    // Keep an updated local copy of groups.
    ngOnInit() {
      this.angularFireDatabase.list('groups').subscribe(groups => this.groups = groups);
    }
    
    function findGroupByName(name) {
      return this.groups.find(group => group.name === name);
    }
    

    【讨论】:

    • 我已经完成了大部分工作。有没有办法在不打印列表并让他们单击它的情况下获取 ID?比如说,用户输入他们想要加入的收容所的名称,然后在打字稿中我根据名称找到组,抓住它的关键,然后更新它的用户列表?
    • FirebaseListObservable 不存在 find 方法。有什么需要导入的吗?
    • 我调用的可观察对象 groups 与缓存的组数组之间存在冲突。我已将前者重命名为groups$
    猜你喜欢
    • 2018-03-26
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2017-09-15
    相关资源
    最近更新 更多