2014-04-17 2 views
1

java를 사용하는 angularjs에서 페이지를 새로 고친 후 세션을 유지하려고합니다. 나는 많은 예를 보았지만 정확하게 찾고있는 해결책을 찾지 못했습니다. 아래의 로그인 코드 조각을 찾으십시오. 로그인 버튼을 클릭하면 LoginController에서 loginUser() 함수가 호출됩니다. 페이지를 새로 고치면 LoginController로 이동하지만 loginUser() 함수 내부로는 들어 가지 않습니다.페이지를 새로 고침 할 때 angularjs의 함수를 호출하는 방법

내 지식에 따르면 기능을 호출하기 전까지는 내부에 들어 가지 않습니다. 새로 고침을하면 loginUser() 함수를 어떻게 다시 호출 할 수 있습니까?

나를 도우십시오. 감사합니다. 많이 감사드립니다.

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

로그인을 완료 한 후 페이지를 새로 고치는 것에 대해 이야기하고 있습니까? 이전의 경우 username \ password를 다시 입력하고 새로 고침을 한 후 다시 버튼을 클릭해야합니다. – Chandermani

+0

로그인 후, 사용자 홈페이지에서 새로 고침 할 때 사용자 데이터를 유지 관리 할 수 ​​없습니다. – pravy89

답변

0

이 페이지 새로 고침 후 loginUser를 호출 할 이유가 내게 분명하지 않다. 사용자가 이미 로그인하지 않았습니까? 내 생각에 당신이 원하는 것은 loginIser 내부에서 success 함수를 호출하는 것이다. 이 경우 해당 데이터를 Java 템플리트 내에 전역 JS 변수로 포함시켜 컨트롤러에 전달해야합니다. $rootScope.userlogin = login.uname; userService.setUserName(login.uname); SessionIdService.setSessionId(login.sessionId); $location.path("/home"); 그래서, 자바 템플릿에, 같은 것을 할 :

당신은 아마이 새로 고침 후 실행하려면 다음

<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

답장을 보내 주셔서 감사합니다. 여기에서, 사용자가 새로 고침을 클릭한다고 가정 할 때, 그것은 컨트롤러를 호출하는 것입니다. 그러나 나는 함수 내부로 갈 수 없습니다. 나는 그 기능을 상기하고 싶다.나는 part2가 나를 위해 예상대로 작동하지 않는다는 점에서 아래의 예제를 따랐다. http://blog.e-bluesoft.com/angularjs-login-dialog-with-springmvc-part-1/ – pravy89

+0

문제가 해결되어 해당 기능을 회상하고 세션을 유지 관리 할 수 ​​있습니다. 모든 답장을 보내 주셔서 감사합니다. – pravy89

관련 문제