我有一个用户身份验证服务,可以在用户登录时创建currentUser
对象。这对所有视图都可用,但我似乎无法将其提供给其他控制器。
我正在尝试在其他控制器中使用此对象发布到我的Firebase:
身份验证服务代码段:
myApp.factory('Authentication', function($firebaseAuth, $firebaseObject, $rootScope, $routeParams, $location, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL);
var auth = $firebaseAuth(ref);
auth.$onAuth(function(authUser) {
if(authUser) {
var ref = new Firebase(FIREBASE_URL + '/users/' + authUser.uid);
var user = $firebaseObject(ref);
$rootScope.currentUser = user;
} else {
$rootScope.currentUser = '';
}
});
控制器尝试访问currentUser
对象:
myApp.controller('MyTastingsController',
function($scope, $firebaseArray, $rootScope, FIREBASE_URL) {
console.log(currentUser);
var ref = new Firebase(FIREBASE_URL + '/users/' +
$rootScope.currentUser.$id + '/tastings');
var tastingsInfo = $firebaseArray(ref);
tastingsInfo.$loaded().then(function(data) {
$scope.tastings = data;
}); //make sure tastings data is loaded
我最初发现失败时找不到$id
的{{1}},所以我将console.log放在顶部,undefined
返回未定义的那里。有什么想法吗?
使用此控制器的视图可以正确调用currentUser params。
**编辑:**我已经将console.log更改为应该查找currentUser
,现在我有时会获得正确的信息,但并非总是如此。刷新或其他一些操作后,很多次我会得到未定义的错误。这对我来说是一种时间问题,但我不确定如何攻击它。
**编辑2:**我在使用$rootScope.currentUser
定义tastingsInfo之后立即添加了另一个console.log,并在控制台中获取以下内容: