我想在角度js的$ http.get请求的两个方法之间共享一个变量 我的代码看起来像这样
app.run(function($rootScope,$http) {
$rootScope.checkSession = function(){
window.a = false;
$http.get('/data/url')
.success(function(response) {
window.a = true;
})
.error(function(response){
window.a = false;
});
return window.a;
};
});
我的控制器代码看起来像这样
app.controller('profileController', function($scope, $rootScope) {
alert($rootScope.checkSession());
});
它始终输出false,而如果我在两个函数中都提醒响应它可以正常工作。
答案 0 :(得分:3)
你的回报和承诺令人困惑。 window.a将在您的promise($ http.get)结算时设置为async,到那时,您的返回值已经返回并被alert()使用。
答案 1 :(得分:2)
您的工作方式不是处理异步调用的正确方法,因为根据当前实现,它始终会从false
方法返回checkSession
。您需要从异步处理的方法返回promise
。该承诺将从其resolve
& reject
。
另外一点是,我希望在工厂内部使用此代码,而不是在$rootScope
内部。
<强>工厂强>
app.factory('sessionFactory', function($http) {
var sessionFactory = {}
sessionFactory.checkSession = function(){
return $http.get('/data/url')
.then(function(response) {
return true;
},(function(response){
return false;
});
};
return sessionFactory;
});
因此,要在控制器中使用它,首先需要在控制器工厂功能&amp;上注入sessionFactory
。然后使用checkSession
方法。在那个方法的内部。然后你将返回数据。
<强>控制器强>
app.controller('profileController', function($scope, sessionFactory) {
sessionFactory.checkSession().then(function(data){
alert(data);
});
});