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

时间:2015-06-01 14:23:21

标签: javascript angularjs

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

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) 

    {  
    ... 
    }

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

1 个答案:

答案 0 :(得分:0)

您可以在服务中保存用户名。在进行完全刷新时,$ 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”!