我试图在使用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>
答案 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