如何使用AngularFire $ asObject()检查Firebase中是否存在对象?

时间:2014-09-11 02:23:12

标签: angularjs firebase angularfire

我正在使用angularFire 0.8.2而我正在尝试检查用户的唯一性。

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

因此,当我使用Facebook登录时,我需要检查该用户是否已经在firebase中,所以我使用(来自angularFire-seed):

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没有原始值时不存在,但是我不确定这是否是检查它的正确方法。 / p>

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

2 个答案:

答案 0 :(得分:13)

使用原始值(null为其中之一)时,AngularFire会将它们存储在$ value键中。因此,要测试路径中的数据是否存在,您只需执行:

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

答案 1 :(得分:0)

对于基元:使用data.$value !== null

对象:至少检查对象必须具有的键data.id !== null

对于每次检查,请将其合并到

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