页面刷新时,如何在angularjs中回调函数

时间:2014-04-17 11:52:33

标签: angularjs

我试图在使用java的angularjs中页面刷新后维护会话。我见过很多例子但是,我找不到正确的解决方案,而这正是我正在寻找的。 请查看下面的登录代码段,当我点击登录按钮时,它在LoginController中调用loginUser()函数 当我进行页面刷新时,它将转到LoginController,但它不会进入loginUser()函数。

根据我的知识,直到我们称之为功能,它并没有进入它的内部。 当我刷新时如何回调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>

1 个答案:

答案 0 :(得分:0)

我不清楚为什么要在页面刷新后调用loginUser。用户是否已经登录?我想你想要的是在loginIser中调用success函数。在这种情况下,您需要将该数据作为全局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 ==&#34; true&#34;似乎关闭,检查应该只是SessionIdService.getSessionId