AngularJS:在控制器之间传递变量
我是angular的新手,我正试图找到一种在控制器之间传递变量的方法。我发现实现这一点的最佳方法是使用服务,如下所示- 然而,正如我将在底部解释的那样,这似乎不适用于我的代码 这是我的服务代码AngularJS:在控制器之间传递变量,angularjs,service,controllers,Angularjs,Service,Controllers,我是angular的新手,我正试图找到一种在控制器之间传递变量的方法。我发现实现这一点的最佳方法是使用服务,如下所示- 然而,正如我将在底部解释的那样,这似乎不适用于我的代码 这是我的服务代码 app.service('loginService', function ($http) { var loggedInUser = [] //If the login was successful this will be used this.setLoginDetails = function(u
app.service('loginService', function ($http) {
var loggedInUser = []
//If the login was successful this will be used
this.setLoginDetails = function(userDetails){
loggedInUser.push(userDetails);
}
this.GetLoginUsername = function () {
return loggedInUser.Username;
}
});
现在我的两个控制器
app.controller('loginController', function ($scope, $rootScope, loginService, $location, $window) {
$scope.authenticateLogin = function () {
// get record
var user = {
Username: $scope.username,
Password: $scope.password
};
var promisePost = loginService.post(user);
promisePost.then(function (result) {
var res = result.data;
//This is the important line
loginService.setLoginDetails(user);
$window.location.href = loginPageUrl;
},
function (errorResult) {
console.log("Unable to log in : " + errorResult);
});
}
});
试图检索已设置信息的控制器
app.controller('userController', function ($scope, userService, $window, $modal, loginService) {
// Get the current logged in user
$scope.LoggedInAs = loginService.GetLoginUsername();
});
我遇到的问题是,第一个控制器正确设置了用户名,但当我尝试使用第二个控制器访问该信息时,loggedInUser的值为null,因此该值不会在控制器之间保存。我做错了什么?
var loggedInUser=[]
是一个数组,因此如果您想获取用户名,您必须执行loggedInUser[0]。用户名
,而不是loggedInUser.username
this.GetLoginUsername = function () {
return loggedInUser[0].Username;
}
此外,如评论中所述,使用ngRoute/uiRouter更改页面/url…我认为这是由于:
$window.location.href=loginPageUrl代码>刷新页面而不是更改状态。感谢您的回复。我应该用什么来代替它呢?试着这样做:另一个选项是将登录凭据(您可能无论如何都想这样做)存储在cookie或会话中,以便以后读取。我认为$location.path应该为u。这可能会有所帮助:对我以前从未使用过的ngroute进行了更多的挖掘,并设法让它像这样工作。