如何使用angularfire检查Firebase中是否存在数据?

问题描述:

我想在Firebase中手动注册用户。我如何检查用户是否已经注册或者他的(USERID)是否存在?如果它存在,则不应该让他注册,否则如果他的用户名尚未在数据库中,则应保存他的信息。这是我目前的代码,其中只保存userinfo仍然可用。如何使用angularfire检查Firebase中是否存在数据?

$scope.details={}; 

$scope.registerme= function() { 
var someDate = new Date(); 
var ref = firebase.database().ref('/Users/'); 
$scope.submitme = $firebaseArray(ref); 


      $scope.submitme.$add({ 
      facebookid: $scope.details.userid, 
      firstname: $scope.details.firstname, 
      lastname: $scope.details.lastname, 
      timestamp: someDate.toString(), 
      }).then(function(ref) { 
      alert('Registration success.'); 
      }).catch(function(error) { 
      alert('Registration Failed.'); 
      }); 

}; 

没有什么内置到AngularFire中用于检测节点是否存在。但由于AngularFire是建立在火力地堡的JavaScript SDK的顶部,您可以使用JavaScript API做到这一点:

ref.child(uid).once('value', function(snapshot) { 
    console.log(snapshot.exists()); 
}); 

认识到的重要一点是,这个片段使用value事件,这将触发null如果有在当前位置没有数据。

一个$firebaseArray()从AngularFire,另一方面使用火力地堡的child_*事件,不能用于检测收集在一个特定的孩子的存在。

+0

感谢我接着说:如果(snapshot.exists ()){alert(“那个用户已经存在”);} else {alert(“用户不存在”);}'提示你。 – frank2k16

如果将您的db实体设置为FirebaseObjectObservable,那么您可以使用exists()来检查您的实体是否存在。 我不知道怎么检查,如果我的表存在,如果没有,我会用初始数据填充:

vehicle.service.ts:

... 
public vehicles$$: FirebaseObjectObservable<any>; // link to '/vehicles' as object 
public vehicles$ FirebaseListObservable<Vehicle[]>; // link to '/vehicles' as list 
... 
constructor(
    private _http: Http, 
    private _db: AngularFireDatabase, 

) { 
    this.vehicles$$ = _db.object('/vehicles'); 
    this.vehicles$ = _db.list('/vehicles'); 
} 


public getVehicles(){ 
    this.vehicles$$.subscribe(table => { 
    if(!table.$exists()){   
     this.getVehiclesFromFile().subscribe(vehicles(vehicles: Vehicle[]) => 
     this.vehicles$$.set(vehicles).catch(err=>console.error(err)) 
    ) 
    } 
    }) 
    return this.vehicles$; 
}