如何在javascript/angular中设置函数内的全局变量?

use*_*672 1 javascript variables functional-programming global-variables angularjs

好吧,我需要在不同的角度控制器或任何函数中使用变量,我可以这样做,但在这种特殊情况下,我从服务或函数中获取其中一个变量的值,你想如何调用它这是代码

//global variable userdata
userdata = {};

ng.tcts.service('$user', function($http, $q, $window, $boots){
return{

    login: function(data){
        var deferred = $q.defer();

        $http({
            method:'POST',
            url:ng.api+'/log/in',
            data:{
                    data:data
                },
            headers:{'Content-type':'application/x-www-form-urlencoded'}        
        }).success(function(response, status, headers, config){
            if(response.success){
                console.log(response);
                //userdata assignation
                userdata = response.data;  
                deferred.resolve([response.respnum, response.success, response.report, response.data]);
            }
            else{
                deferred.resolve([response.respnum, response.success, response.report, response.data]);
            }
        }).error(function(response, status, headers, config){
            deferred.reject([response.respnum, response.success, response.report]);
        });
        return deferred.promise;        
    }

);
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,我在userdata中为了成功函数中的response.data的值,当我在它工作的函数环境中使用它时,赋值工作正常,但是当我尝试在它之外使用它时,对象是空的,我希望你可以帮我这个,谢谢

btm*_*tm1 5

您需要做的就是创建一个获取和设置用户数据的服务,并将数据保存在服务中.然后,您创建一个返回该数据的方法,然后将其注入应用程序中的任何控制器.

app.service('userData',function(){
var data;

this.get = function() {
    // do your ajax call to get your user data and in the response data = response;
}

this.data = function() {
    return data;
}
});
Run Code Online (Sandbox Code Playgroud)

然后在任何控制器:

function myCtrl($scope,userData) {
    // you can access it with this userData.data();

    // or set it to a $scope var

    $scope.userData = userData.data();
}
Run Code Online (Sandbox Code Playgroud)

创建一个全局变量不是你如何使用Angular,你可以创建一个服务然后注入你的控制器,这样多个地方可以与该数据对话,或者你可以将它设置为$ rootScope var,然后在任何控制器中引用它.永远不要创建一个全局变量并在控制器中引用它.这就是你在Angular中最终导致内存泄漏的方法.