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

时间:2016-08-30 18:19:51

标签: javascript ionic-framework firebase firebase-realtime-database angularfire

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

$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.');
            });

};

2 个答案:

答案 0 :(得分:3)

AngularFire中没有任何内置功能可用于检测节点是否存在。但是,由于AngularFire是基于Firebase JavaScript SDK构建的,因此您可以使用JavaScript API执行此操作:

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

要认识到的重要一点是,此代码段使用value事件,如果当前位置没有数据,则会触发null

另一方面来自AngularFire的$firebaseArray()使用Firebase的child_*事件,这些事件不能用于检测集合中特定子项的存在。

答案 1 :(得分:0)

如果您将数据库实体的链接设置为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$;
}