Javascript AngularJS:同一控制器中其他函数的访问范围

Javascript AngularJS:同一控制器中其他函数的访问范围,javascript,angularjs,Javascript,Angularjs,我在一个项目中使用angular,在用户登录后,他的数据被保存到数据库中,他可以传递到主应用程序。 但是我需要使用他的名字来显示他的命令,所以我可以在他登录时提取他的名字,但是当我想在另一个函数中使用这个名字时,我得到:'未定义' AngularJS $scope.redirectafterLogin = function($username) { $rootScope.username = $username; window.location = "index1.html";

我在一个项目中使用angular,在用户登录后,他的数据被保存到数据库中,他可以传递到主应用程序。 但是我需要使用他的名字来显示他的命令,所以我可以在他登录时提取他的名字,但是当我想在另一个函数中使用这个名字时,我得到:'未定义'

AngularJS

$scope.redirectafterLogin = function($username)
{
    $rootScope.username = $username;
    window.location = "index1.html";
}
//SHOW ORDER FOR LOGGED IN CUSTOMER  
$scope.orderCustomer = function (){
    $http.get('/api/getorderS/'+$rootScope.username).then(function (results) 

    {  
    ... 
    }

那么,如何访问my orderCustomer函数中的
$rootScope.username
变量?

您可以将用户名保存在服务中。在执行完全刷新时,$scope或$rootScope会被鞭打,因为当您“实例化”控制器时,会创建一个作用域,当您刷新页面时,控制器会被重新实例化,因此作用域也会被鞭打。因此,要创建您的服务,请执行以下操作:

app.factory('userService', [function() {
    return {
        userName: null
    }
}])
然后在控制器中:

app.controller('loginCtrl', ['userService', function(userService) {
    $scope.redirectafterLogin = function($username)
    {
        userService.userName = $username;
        window.location = "index1.html";
    }

    $scope.orderCustomer = function (){
       $http.get('/api/getorderS/'+ userService.userName).then(function (results) 

       {  
            ... 
       }
您可以制作一个getter和setter来美化上述代码,只需添加:

setUserName: function(user) {
        this.userName = user;
     },
getUserName: function() {
        return this.userName;
}
到您的服务,然后将
+userService.username
替换为
+userService.getUserName()

编辑
另请注意:确保您在'index1.html'中使用了ng controller=“loginCtrl”

登录页面和主应用程序之间似乎有完全刷新。因此,您可能会丢失所有变量值。如果必须刷新,那么您可以将用户名作为参数传递给“主应用”。是的,有一个完全刷新。。。如何将用户名作为参数传递?window.location=“index1.html?username=“+$username;然后在“主应用程序”中从URL获取此参数。有很多这样做的例子。或者可能是$username未定义,请检查您是否有值。您是否在控制器中注入了$rootScope?