$ rootScope变量未定义?

时间:2016-04-19 15:45:29

标签: javascript angularjs

所以,我试图在用户登录后在NavCtrl中获取一个对象($ rootScope.User)(因此在onLogin函数运行之后)。

但是,我做错了什么,我无法弄清楚如何解决它。我认为它可能是在获取值之前读取代码。但是,我不太确定。如果有人能帮助我,那就太棒了!

谢谢!

.controller('LoginCtrl', function (Backand, $state, $rootScope, LoginService, $ionicPopup, dataService) {

    var login = this;
    $rootScope.isLoggedin = null;

    function signin() {
      LoginService.signin(login.email, login.password)
          .then(function () {
          onLogin();
        }, function (error) {
          console.log(error);

          $rootScope.showAlert = function () {
            var alertPopup = $ionicPopup.alert({
                title: 'Login Error',
                template: error.error_description
              });
          };

          $rootScope.showAlert();
        });
    }

    function onLogin() {
      $rootScope.$broadcast('authorized');
      $state.go('tabs.feed');
      login.username = Backand.getUsername();
      $rootScope.isLoggedin = true;

      $rootScope.cUser = Backand.getUserDetails().$$state.value;
      console.log($rootScope.cUser);
    }
});

.controller('NavCtrl', function($scope, $rootScope, Backand, dataService) {

  function getUser() {
      $scope.user = $rootScope.cUser;
      console.log($scope.user);
    }

  getUser();
});

3 个答案:

答案 0 :(得分:1)

这是一个错字。从c

上方的cUser一行中删除console.log($rootScope.User);

执行此操作

console.log($rootScope.cUser);

答案 1 :(得分:1)

可能不是您要寻找的答案,但避免使用$rootScope来存储全局

使用服务并将其注入

.factory('UserService', function() {
  return {
      user : {name:'anonymous'}
  };
});

然后在控制器中:

.controller('NavCtrl', function($scope, UserService, Backand, dataService) {
    $scope.user = UserService.user;
}

答案 2 :(得分:0)

执行此操作$state.go('tabs.feed') tabs.feed是否有可能调用NavCtrl?如果是,那么是的,您在设置值之前就已经阅读了它。