2015-05-11 44 views
0

我是新來的角度,我試圖找到一個在控制器之間傳遞變量的方法。我看到了實現這一目標是通過使用服務的最佳方法,如下所示 - AngularJS: How can I pass variables between controllers?AngularJS:在控制器之間傳遞變量

然而,這似乎並沒有與我的代碼工作,我將在底部解釋。

這裏是我的服務代碼,

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,以便在控制器之間不保存該值。我究竟做錯了什麼?

+1

我認爲這是由於:'$ window.location.href = loginPageUrl;'這刷新而不是改變狀態。 –

+0

感謝您的回覆。我應該用什麼來代替這個? – user3407039

+0

嘗試像這樣:https://scotch.io/tutorials/single-page-apps-with-angularjs-routing-and-templating –

回答

0

var loggedInUser = []是一個數組,因此如果你想獲得用戶名,你必須做loggedInUser[0].Username而不是loggedInUser.Username

this.GetLoginUsername = function() { 
    return loggedInUser[0].Username; 
} 

此外,在註釋中規定或者使用ngRoute/uiRouter改變頁面/ URL ......

+0

做了一些更深入的ngroute,我以前沒有用過,並設法讓它像那樣工作。 – user3407039

相關問題