Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:在控制器之间传递变量_Angularjs_Service_Controllers - Fatal编程技术网

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

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

我是angular的新手,我正试图找到一种在控制器之间传递变量的方法。我发现实现这一点的最佳方法是使用服务,如下所示-

然而,正如我将在底部解释的那样,这似乎不适用于我的代码

这是我的服务代码

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进行了更多的挖掘,并设法让它像这样工作。