AngularJS:在控制器之间传递变量

22 浏览
0 Comments

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的值为空,因此该值在控制器之间没有保存。我做错了什么?

0
0 Comments

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中控制器之间传递变量的问题。

0