2014-09-11 3 views
4

저는 angularFire 0.8.2를 사용하고 있으며 사용자의 고유성을 확인하려고합니다.

이 사용자는 사용자/[id]에 저장되며 [id]는 로그인/비밀번호 사용자의 simpleLogin 생성 ID이고 소셜 네트워크에서 제공되는 social uid입니다 (예 : facebook : 891239120). 내가 페이스 북으로 로그인있을 때

그래서, 그 사용자가 중포 기지에 이미 있는지 확인해야합니다, 그래서 (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); 
      }); 

하지만이 때문에 작동하지

obj가 비어있을 때 obj. $ value가 null로 채워지고, obj가 프리미티브 값을 가지고 있지 않을 때 존재하지 않는 것으로 나타났습니다. ,하지만 이것이 올바른 방법인지 확인하지는 않습니다.

그리고/사용자가 $ asArray를 사용하면 성능 문제가 발생할 수있는 프로덕션보다 firebase에 모든 사용자가로드됩니다.

답변

13

원시 값 (null 중 하나임)으로 작업 할 때 AngularFire는 $ 값 키에이를 저장합니다. 경로의 데이터, 당신은 간단하게 수행 할 수있는 경우 따라서, 테스트 : 원시의 경우

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

에 병합 너. 자바 스크립트 만세. –

+1

오브젝트의 경우, 어쨌든'$ value'에 저장되지 않습니다 (특별한'$ value' 속성이 아니라'data'에 키로 저장 될 것입니다.) – Kato

+0

이것은 어쨌든 $ value와 같은 객체에 대한 작업은 내 대답을 참조하십시오.;) –

0

: 사용 목적를 들어 data.$value !== null

: 적어도 키에 대한 개체가 있어야합니다 체크 즉 data.id !== null입니다. everycase 체크 들어

! = '$의 값'미정 따라서 널 (null) 종료 될 것 '으로서, 프리미티브보다는 객체를 포함 스냅 불충분`것을주의

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

관련 문제