2014-09-11 26 views
4

我使用的是angularFire 0.8.2,我试图检查用户的唯一性。

此用户存储在users/[id]中,其中[id]是来自社交网络(例如:facebook:891239120)的simpleLogin生成的用于登录/密码用户的id和社交uid。

所以,当我与Facebook登录,我需要检查,如果该用户已经在火力点,所以我使用(从angularFire种子):

var userData = fbutil.syncObject('users/' + user.uid); 
userData.$loaded() 
     .then(function (data) { 
     if(data) { 
       console.log('EXISTS'); 
       console.log(data.$id); 
     } else { 
       console.log('NOT EXISTS'); 
     } 
      }, function (err) { 
       console.error(err); 
      }); 

但是,这并不是因为工作数据对象总是被返回(即使对象不是用关键字user.uid也不存在)

我发现obj。$ value在obj为空时填充null,而在obj没有原始值时不存在,但我不确定这是否是检查它的正确方法。

而且我也不知道我是否在/ users上使用$ asArray,它会加载firebase上的每个用户而不是生产中的性能问题?

回答

13

当使用原始值(null是其中之一)时,AngularFire将它们存储在$ value键中。因此,为了测试是否在路径上的数据时,你可以简单地执行:

data.$loaded(function() { 
    var dataExists = data.$value !== null; 
}); 
+1

要注意的是'!='不足以包含对象,而不是原语的快照,因为'$ value'将是不确定的,因此空值ISH。用于JavaScript的Hooray。 – 2017-02-03 20:28:35

+1

对于对象,它不会存储在'$ value'中(它将作为关键字存储在'data'中,而不是特殊的'$ value'属性中,因此可能是一个争议点。 – Kato 2017-02-06 23:55:42

+0

This doesn不要为对象工作,因为$ value无论如何都是空的,请参阅我的答案;) – 2017-11-14 12:59:37

0

对于原语:使用data.$value !== null

对于对象:至少检查一个键的对象必须即data.id !== null

对于everycase检查,合并它们在

if(data.$value === null && data.id === null) { //not exist }else{ // exist };

相关问题