2016-02-01 19 views
0

我实现了一个登录系统的角度资源这样

..factory.js

//Create a factory for the Login API 
angular.module(...) 
.factory('LoginEntity', ['$resource', function ($resource) { 
return $resource(
    'API/sigin', 
    { 
     save: {method: 'POST'}, 
     update: {method: 'PUT'} 
    } 
); 
}]) 

... controller.js

.controller('xxxController', ['LoginEntity', function(LoginEntity, $rootScope){ 
//in Controller add LoginEntity dependency 
    $rootScope.loggedinuser = {}; 

LoginEntity.save({ 
         username: user.userName, 
         password: user.password 
        }, 
        function (response) { 
         //success callback 
         $rootScope.loggedinuser = response; 
        }, 
        function() { 
         //error callback 

        }); 

}]); 

... AppCtrl

.controller('AppCtrl',function($scope,$rootScope){ 

    username = $rootScope.loggedinuser.username; 

    } 

这就是我所拥有的,但rootcope似乎并没有在App控制器中可访问。

任何帮助,或协助将高度赞赏

+0

看起来像在执行成功回调之前访问'$ rootScope.loggedinuser'(假设错误回调产生了一些控制台日志,因此您知道执行成功了)。看看[Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) – Aprillion

+0

就像@Aprillion所说的,你在访问$ rootScope.loggedinuser之前成功回调被执行。您可以将API调用移至AppCtrl而不是xxxController,并在成功回调中执行逻辑。 –

+0

感谢@ huan feng,我把它移到了App Ctrl上,它工作正常 – kplus

回答

2

您controller.js有一个错误,添加$rootScope你这样的代码:

.controller('xxxController', ['LoginEntity', '$rootScope', function(LoginEntity, $rootScope){ 
//in Controller add LoginEntity dependency 
    $rootScope.loggedinuser = {}; 

LoginEntity.save({ 
         username: user.userName, 
         password: user.password 
        }, 
        function (response) { 
         //success callback 
         $rootScope.loggedinuser = response; 
        }, 
        function() { 
         //error callback 

        }); 

}]); 
+0

如果它可以帮助你,请记住接受答案! –

+0

它仍然无法正常工作....无法读取AppCtrl中未定义的属性'loggedinuser' – kplus

+0

你会得到什么结果? –

0

使用依赖注入。这应该有希望的工作:

.controller('AppCtrl',['$scope', '$rootScope', function($scope,$rootScope){ 

    username = $rootScope.loggedinuser.username; 

}]) 

这也使得在缩小,行为不会中断,文字变量名会自动改变。

+0

它仍然无法正常工作....无法读取属性'loggedinuser'未定义的AppCtrl – kplus

1

你的代码改成这样:

.controller('xxxController', ['LoginEntity', '$rootScope', function(LoginEntity, $rootScope){ 
/// 
}]); 

... AppCtrl

.controller('AppCtrl', ['$scope, '$rootScope', function($scope,$rootScope){ 
/// 
    }] 
+0

它仍然无法正常工作....无法读取属性'loggedinuser'的未定义在AppCtrl – kplus

0

你必须注入$ rootScope到控制器

.controller('xxxController', ['LoginEntity', '$rootScope', function(LoginEntity, $rootScope){ 
// TO DO Something 
}]); 

或暗示的注释(小心缩小你的密码)

.controller('xxxController', function(LoginEntity, $rootScope){ 
// TO DO Something 
}); 

这里是控制器

.controller('AppCtrl',['$scope', '$rootScope', function($scope,$rootScope){ 

    $rootScope.loggedinuser = "your user detail" 

}]) 
0

注入$ rootScope我不知道这是否是你想要的。如果你想在localStorage中保存loggedinuser,你应该在成功回调中执行。

...AppCtrl 
.controller('AppCtrl', ['LoginEntity', '$scope', '$rootScope', function(LoginEntity, $scope,$rootScope){ 

    LoginEntity.save({ 
        username: user.userName, 
        password: user.password 
       }, 
       function (response) { 
        //success callback 
        localStorage.setItem('loggedinuser', JSON.stringify(response)); 
       }, 
       function() { 
        //error callback 
        LoggerService.error('Landing page:error during LoadTestEntity initiation'); 
       }); 

    } 
+0

它仍然无法正常工作......无法读取AppCtrl中未定义的属性'loggedinuser' – kplus

0
+0

谢谢,如果我检索它像这样$ scope.loggedInUser = JSON.parse(window.localStorage [ 'loggedInUser'] ||'{}');我可以访问它在登录范围内访问它,但它在范围外返回undefined,是否有我遇到错误? – kplus

相关问题