$ rootScope对象在另一个控制器中不可用(但在视图中可用)

时间:2015-03-22 07:00:23

标签: angularjs angularjs-scope firebase angularjs-service angularjs-controller

我有一个用户身份验证服务,可以在用户登录时创建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,并在控制台中获取以下内容:

Console.log output for tastingsInfo

0 个答案:

没有答案