2014-04-17 38 views
1

我试图在使用java的angularjs中刷新页面之后维护会话。我看过很多例子,但是,我没有找到正确的解决方案,我正在寻找。 请在下面找到登录代码段,当我点击登录按钮时,它在LoginController中调用loginUser()函数 当我做页面刷新时,它会去LoginController,但它不会在loginUser()函数内部进行。根据我的知识,直到我们调用函数,它不会进入它的内部。 当我刷新时,我怎样才能回调loginUser()函数。当页面刷新时,如何在angularjs中回调函数

请帮助我从这些。赞赏..很多谢谢。

LoginController.js

function LoginController($scope, $http, $location, $rootScope, 
    userService, SessionIdService) { 
$scope.user = {}; 
$scope.user.username = ''; 
$scope.user.password = ''; 


$rootScope.loginUser = function(username, password) { 

    $scope.resetError(); 

    $http.post('/user/main/login/' + username, password).success(
      function(login) { 

       if (login.sessionId === null) { 
        $scope.setError(login.status); 
        return; 
       } else { 


        $rootScope.userlogin = login.uname; 
        userService.setUserName(login.uname); 
        SessionIdService.setSessionId(login.sessionId); 
        $location.path("/home"); 
       } 

      }).error(function() { 
     $scope.setError('Invalid user/password combination'); 
    }); 

}; 

$scope.resetError = function() { 
    $scope.error = false; 
    $scope.errorMessage = ''; 
}; 

$scope.setError = function(message) { 
    $scope.error = true; 
    $scope.errorMessage = message; 
    $rootScope.sees = ''; 
    $rootScope.userlogin = ''; 
}; 

};

app.js

app.run(function($rootScope, $location, SessionIdService) { 


$rootScope.$on("$routeChangeStart", function(event, next, current) { 

    console.log("Routechanged... "); 

    if (SessionIdService.getSessionId == "true") { 


     if (next.templateUrl == "scripts/views/homescreen.html") { 
      $location.path("/home"); 

     } else { 

      $location.path("/screen"); 
     } 
    } 
}); 

});

的login.html

<input name="textfield" type="text" ng-model="user.username"/> 
<input name="textfield" type="password" ng-model="user.password"/> 
<button type="button" ng-lick="loginUser(user.username,user.password)">Login</button> 
+0

你是说在登录完成之后刷新页面还是之前。如果是以前,用户必须再次输入用户名\密码,刷新后再次点击按钮。 – Chandermani

+0

登录后,在用户主页上刷新我无法维护用户数据。 – pravy89

回答

0

为什么你想页面刷新后打电话到loginUser这是我不清楚。用户是否已经登录?我想你想要的是在loginIser中调用成功函数。在这种情况下,您需要将该数据作为全局JS变量嵌入Java模板中,并以某种方式将其传递给控制器​​。

你可能想这些刷新后运行: $rootScope.userlogin = login.uname; userService.setUserName(login.uname); SessionIdService.setSessionId(login.sessionId); $location.path("/home"); 所以,在你的Java模板,这样做:

<script>window.UNAME = {% this comes from your database %};window.SESSIONID={% similar %}</script> 

然后,不知何故调用该函数与window.UNAME作为输入。 (或者在你的控制器,喜欢的东西检查window.UNAME的存在,并立即调用它。

window.UNAME && function (name, sessionId) { 
        $rootScope.userlogin = uname; 
        userService.setUserName(uname); 
        SessionIdService.setSessionId(sessionId); 
        $location.path("/home"); 
) { 

}(window.UNAME, window.SESSION_ID) 

其他一些建议(无关您的主要问题大概):

首先,改变$rootScope.loginUser = function(username, password) {

$rootScope.loginUser = function() { var username = $scope.user.username; var password = $scope.user.password

,因为你已经获得的用户名和密码在那里。所以,改变ng-click="loginUser()"

其次,SessionIdService.getSessionId ==“true”似乎关闭,检查应该可能只是SessionIdService.getSessionId

+0

感谢您的回复。在这里,当用户想要点击刷新时,它是调用控制器,但我无法进入功能。我想回忆一下这个功能。我遵循下面的例子,因为第二部分没有按预期为我工作。 http://blog.e-bluesoft.com/angularjs-login-dialog-with-springmvc-part-1/ – pravy89

+0

问题解决了,我可以调用该函数并保持会话。感谢你的回复。 – pravy89

相关问题