如何在javascript/angular中为函数内部的全局变量设置值
How to set a value to a global variable inside a function in javascript/angular?
好吧,我需要在不同的角度控制器或任何函数中使用一个变量,我可以这样做,但在这种特殊情况下,我从服务或函数中获得其中一个变量的值,你想如何调用它,这是代码
//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;
}
);
正如你所看到的,我在成功函数中为userdata赋值response.data的值,当我在函数环境中使用它时,赋值效果很好,但当我尝试在它之外使用它时对象是空的,我希望你能帮助我,thx
您所需要做的就是创建一个获取和设置用户数据的服务,并且数据保存在服务中。然后你制作一个返回数据的方法,你可以将其注入应用程序中的任何控制器。
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;
}
});
则在任何控制器中:
function myCtrl($scope,userData) {
// you can access it with this userData.data();
// or set it to a $scope var
$scope.userData = userData.data();
}
创建全局变量不是使用Angular的方式。您可以创建一个服务,然后将其注入到控制器中,以便多个位置可以与该数据对话,或者您可以将其设置为$rootScope-var,然后在任何控制器中引用它。千万不要创建全局变量并在控制器中引用它。这就是Angular中内存泄漏的原因。
不是100%清楚你的问题是什么。如果你只是希望从任何控制器调用此服务并获得userdata
的值,那么就用response.data
来解决你的承诺。
因此,为您服务:
deferred.resolve(response.data);
*或您需要的任何其他响应项目
在控制器中:
$user.login(payload).then(function(userData){
console.log(userData);
});
如果您想在向服务器发出请求后维护这些数据,您也可以在服务的变量中的某个位置进行设置(如@btm1所建议的(,如下例所示。
示例
相关文章:
- 我可以从内部函数中产生吗?
- 从内部函数javascript内部分配外部函数的对象
- 将外部函数返回的id传递给内部函数
- 重复调用的同一函数会重置setTimeout内部函数
- Javascript中的内部函数作用域
- 对象内部函数内的对象文本的范围
- 内部函数不会为外部函数在 jQuery 中动态创建的元素赋值
- JavaScript 如何定义内部函数
- bluebird promise catch() 没有使用 Promise.CancelError 调用内部函数
- JavaScript 在内部函数中保留一个 var
- 如何使用Javascript访问内部函数
- 使用从内部函数返回的异步数据对外部函数返回promise
- Javascript对象看不到内部函数
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 如何将参数传递到内部函数中
- JavaScriptEs6在内部函数中引用了这一点
- 需要将内部函数绑定到元素的单击事件
- 将此对象传递给JavaScript中的内部函数
- JavaScript 面向对象的调用函数内部函数或调用函数 insede var
- 从内部函数内部突破while循环'的身体