如何使用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_*
事件,不能用于检测收集在一个特定的孩子的存在。
答
如果将您的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$;
}
感谢我接着说:如果(snapshot.exists ()){alert(“那个用户已经存在”);} else {alert(“用户不存在”);}'提示你。 – frank2k16