AngularJS:在控制器之间传递变量
AngularJS:在控制器之间传递变量
我刚接触Angular,并尝试找到在控制器之间传递变量的方法。我在这里看到了使用服务的最佳方法,如下链接所示:AngularJS:如何在控制器之间传递变量?然而,这似乎在我的代码中不起作用,我将在下面解释。下面是我的服务代码:\n
app.service('loginService', function ($http) { var loggedInUser = []; //如果登录成功,将使用此方法 this.setLoginDetails = function(userDetails){ loggedInUser.push(userDetails); } this.GetLoginUsername = function () { return loggedInUser.Username; } });
\n现在是我的两个控制器:\n
app.controller('loginController', function ($scope, $rootScope, loginService, $location, $window) { $scope.authenticateLogin = function () { //获取记录 var user = { Username: $scope.username, Password: $scope.password }; var promisePost = loginService.post(user); promisePost.then(function (result) { var res = result.data; //这是重要的一行 loginService.setLoginDetails(user); $window.location.href = loginPageUrl; }, function (errorResult) { console.log("Unable to log in : " + errorResult); }); } });
\n我尝试检索已设置的信息的控制器是:\n
app.controller('userController', function ($scope, userService, $window, $modal, loginService) { //获取当前登录的用户 $scope.LoggedInAs = loginService.GetLoginUsername(); });
\n我遇到的问题是,用户名在第一个控制器中被正确设置,但当我尝试使用第二个控制器访问该信息时,loggedInUser的值为空,因此该值在控制器之间没有保存。我做错了什么?
AngularJS: 控制器之间传递变量的问题
在AngularJS中,控制器之间传递变量是一个常见的需求。然而,有时会遇到一些问题,导致无法正确地传递变量。本文将探讨这个问题的原因以及解决方法。
首先,我们看到在代码中定义了一个数组loggedInUser = []
。如果我们想要获取用户名,我们需要使用loggedInUser[0].Username
,而不是loggedInUser.Username
。
接下来,我们可以看到一个函数GetLoginUsername
,它返回loggedInUser[0].Username
。这表示我们可以在其他控制器中调用这个函数来获取登录用户名。
然而,这只是解决了部分问题。在评论中提到,要想改变页面或URL,可以使用ngRoute或uiRouter。这是因为在AngularJS中,控制器之间的变量传递通常是在同一个页面中完成的。如果我们希望在不同的页面之间传递变量,我们需要使用路由来实现。
对于ngRoute,我们需要进行一些额外的配置。在进一步研究ngRoute之后,我们成功地解决了这个问题,并实现了控制器之间的变量传递。
当我们在AngularJS中遇到控制器之间传递变量的问题时,可能有以下原因和解决方法:
原因:
1. 错误地访问数组中的属性,导致无法正确获取变量。
2. 控制器之间的变量传递通常是在同一个页面中完成的,如果希望在不同的页面之间传递变量,需要使用路由。
解决方法:
1. 使用正确的语法访问数组中的属性,例如loggedInUser[0].Username
。
2. 使用ngRoute或uiRouter来改变页面或URL,以实现控制器之间的变量传递。
希望本文可以帮助你解决在AngularJS中控制器之间传递变量的问题。