2014-09-11 27 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 };

相關問題