Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何按键或值删除用户?_Angular_Firebase_Firebase Realtime Database_Angularfire2 - Fatal编程技术网

Angular 如何按键或值删除用户?

Angular 如何按键或值删除用户?,angular,firebase,firebase-realtime-database,angularfire2,Angular,Firebase,Firebase Realtime Database,Angularfire2,我的Firebase数据库中有如下结构: --users --v7BwBnUBqJMXCtoOHYE51jXCwhY2: uid --etc loginFb() { this.af.auth.login({ provider: AuthProviders.Facebook, method: AuthMethods.Popup, }).then( (user) => { this.userOnlin

我的Firebase数据库中有如下结构:

--users
    --v7BwBnUBqJMXCtoOHYE51jXCwhY2: uid
    --etc
  loginFb() {
    this.af.auth.login({
      provider: AuthProviders.Facebook,
      method: AuthMethods.Popup,
    }).then(
        (user) => {
        this.userOnline(user.uid, 'uid');
        this.router.navigate(['/members']);
      }).catch(
        (err) => {
        this.error = err;
      })
  }

  userOnline(uid, value) {
    const users = this.af.database.object('/users');
    users.update({ [uid]: value });
  }
当用户通过以下方式进行身份验证时,将填充用户表:

--users
    --v7BwBnUBqJMXCtoOHYE51jXCwhY2: uid
    --etc
  loginFb() {
    this.af.auth.login({
      provider: AuthProviders.Facebook,
      method: AuthMethods.Popup,
    }).then(
        (user) => {
        this.userOnline(user.uid, 'uid');
        this.router.navigate(['/members']);
      }).catch(
        (err) => {
        this.error = err;
      })
  }

  userOnline(uid, value) {
    const users = this.af.database.object('/users');
    users.update({ [uid]: value });
  }
这将在fb生成的用户表中为ea用户提供uid

我想在用户注销时删除该用户。研究这个我遇到了这个

我是这样应用的:

  logout(userUID) {
    this.af.auth.logout();
    this.userOffline(userUID);
    this.router.navigateByUrl('/login');
  }

  userOffline(userUID) {

    const user = this.af.database.list('/', {
      query: {
        orderByChild: userUID,
        equalTo: 'uid'
      }
    });

    user.subscribe(snapshots=>{
      snapshots.forEach(snapshot => {
        console.log(snapshot);
        snapshot.ref.remove();
      });
    })

  }
console.log的结果是:

Object {v7BwBnUBqJMXCtoOHYE51jXCwhY2: "uid", $key: "users"}
唉,我得到了这个错误:

Cannot read property 'remove' of undefined
我肯定有更好的方法,但我什么也找不到。任何建议都将不胜感激

编辑

感谢@pengyy的评论,我对他们的建议做了一个小小的修改

user.subscribe(snapshots=>{
  snapshots.forEach(snapshot => {
    console.log(snapshot);
    this.af.database.list('/users').remove(snapshot.userUID)
  });
})

这可以工作并删除用户,但它会在页面加载时立即执行此操作,即使在调用函数时也是如此。。。绘图变厚

通过

this.af.database.list('/users').remove(snapshot.$key)

按从表中删除项

this.af.database.list('/users').remove(snapshot.$key)
所以这是可行的。这么简单

谢谢@pengyy如果没有你的评论,我是不可能到达那里的

所以这是可行的。这么简单


谢谢@pengyy,如果没有您的评论,我是无法到达的。

为什么每次用户登录时,您都会不断向表中写入内容并删除?如果这些数据无论如何都会被删除,那么留在angular不是更好吗?我想知道谁在任何时候登录/在线,尽管@EduardoDennis有一个用户列表,并且在登录和退出时更改“在线状态”会更好吗?我认为这是有意义的,因为我还希望持久化用户所属的组。谢谢为什么每次用户登录时都会不断地向表中写入内容并删除?如果这些数据无论如何都会被删除,那么留在angular不是更好吗?我想知道谁在任何时候登录/在线,尽管@EduardoDennis有一个用户列表,并且在登录和退出时更改“在线状态”会更好吗?我认为这是有意义的,因为我还希望持久化用户所属的组。谢谢,恐怕还在那儿。快照。$key只返回“user”,因此无法使用。抱歉,首先,您应该查询表用户以获取$key。编辑后,您的意思是在调用函数之前删除了用户?必须标记除您要回复的帖子问题或答案的作者之外的任何人。斯迈特可能从未见过你回答。您通过键入@标记人员,第一个字母将显示一个自动完成的列表。我不需要给你贴标签,因为你是我回复的作者。另外,也许你可以编辑你的答案,并详细说明,以帮助这个人和其他人更多。我担心用户仍然在那里。快照。$key只返回“user”,因此无法使用。抱歉,首先,您应该查询表用户以获取$key。编辑后,您的意思是在调用函数之前删除了用户?必须标记除您要回复的帖子问题或答案的作者之外的任何人。斯迈特可能从未见过你回答。您通过键入@标记人员,第一个字母将显示一个自动完成的列表。我不需要给你贴标签,因为你是我回复的作者。另外,也许你可以编辑你的答案并详细说明以帮助此人和其他人。我最终使用了以下方法:-logoutuserUID{this.af.auth.logout;this.userOfflineuserUID;this.router.navigateByUrl'/login';}-userOfflineuserUID{const user=this.af.database.list'/users';user.updateuserUID,{userOnline:false}}-因为这将持久化用户数据。使用“更新不推送”,以便不删除现有数据。请参阅我使用此方法结束的示例:-logoutuserUID{this.af.auth.logout;this.userOfflineuserUID;this.router.navigateByUrl'/login';}-userOfflineuserUID{const user=this.af.database.list'/users';user.updateuserUID,{userOnline:false};}-因为这将持久化用户数据。使用“更新不推送”,以便不删除现有数据。参考