假设我要从firebase检索用户信息, 此用户信息将显示在多个路径/控制器
中我应该$rootScope
返回用户信息吗?
或
在每个控制器中调用以下代码?
firebaseAuth.firebaseRef.child('/people/' + user.id).on('value', function(snapshot) {
$scope.user = snapshot.val();
})
更新
我有getUserInfo()
函数的以下服务,那么最好的方法是什么
在几个控制器中使用它?
在每个控制器中调用firebaseAuth.getUserInfo().then()
?
如果用户数据我必须在几个控制器中使用。我为什么不设置它$rootScope
?
所以我不需要在不同的控制器中一次又一次地调用它。
myapp.service('firebaseAuth', ['$rootScope', 'angularFire', function($rootScope, angularFire) {
this.firebaseRef = new Firebase("https://test.firebaseio.com");
this.getUserInfo = function(id) {
var userRef = this.firebaseRef.child('/human/' + id);
var promise = angularFire(userRef, $rootScope, 'user', {});
return promise;
}
});
答案 0 :(得分:1)
我建议创建一个服务来执行身份验证并存储用户数据。然后,您可以将服务注入需要访问用户的任何控制器。
答案 1 :(得分:1)
AngularFire的目的是让您的javascript数据模型始终与Firebase保持同步。每次需要获取数据时,您都不希望创建新的AngularFire承诺。您只需初始化AngularFire一次,您的本地数据将始终是最新的。
myapp.service('firebaseAuth', ['angularFireCollection', function(angularFireCollection) {
this.firebaseRef = new Firebase("https://test.firebaseio.com");
this.initUserInfo = function(id) {
if (!this.userRef) {
this.userRef = this.firebaseRef.child('/human/' + id);
this.userInfo = angularFireCollection(this.userRef);
}
else {
// already initialized
}
}
}]);
请记住,服务的所有属性(即使用this
关键字指定的所有内容)都可以从注入此服务的控制器访问。因此,您可以执行console.log(firebaseAuth.userInfo)
或firebaseAuth.userRef.on('value', function(snap) { ... });
此外,您最终可能希望使用FirebaseAuthClient进行用户身份验证。