Javascript 在anjularjs中执行控制器之前,如何使用$http同步调用在.run()获取数据
在Javascript 在anjularjs中执行控制器之前,如何使用$http同步调用在.run()获取数据,javascript,angularjs,http,synchronous,Javascript,Angularjs,Http,Synchronous,在.run()中,我试图从URL获取数据,以便以后用作每个请求的头的一部分 因此,在.run()函数中,我使用$http.get获取数据(生成令牌)并分配给全局值 问题是即使在控制器初始化之后,$http.get仍将返回数据,因此,我如何从URL(同步)获取此数据(令牌),然后执行控制器的初始化。 这是我的密码: var appc=angular.module('app', []); appc.value('mytoken', ''); appc.value('RESTUrl', 'http:/
.run()
中,我试图从URL获取数据,以便以后用作每个请求的头的一部分
因此,在.run()
函数中,我使用$http.get
获取数据(生成令牌)并分配给全局值
问题是即使在控制器初始化之后,$http.get
仍将返回数据,因此,我如何从URL(同步)获取此数据(令牌),然后执行控制器的初始化。
这是我的密码:
var appc=angular.module('app', []);
appc.value('mytoken', '');
appc.value('RESTUrl', 'http://localhost/token');
appc.run(function ($http, RESTUrl, $q, mytoken) {
$http.get(RESTUrl +'?user=currss').then (function (response)
{
mytoken = response.data;
}, function (response) { console.log('error:' + response.data);}
);
--控制员:
appc.module('ctrl',[])
.controller('ctrl', function ($scope, $http,mytoken,MyService) {
console.log("controller inistializing !");
MyService.getinfo(mytoken)
.then(function (response) {
$scope.DataList = respone.data;
}, function (response) {
console.log(response.status);
console.log(response.data)
}
)
.catch(function (response) {
$window.alert('error');
});
})
不可能。另外,强迫角度(通常是JavaScript)同步也是错误的模式 正确的做法是将令牌放在服务中并从那里访问它。服务返回的值是实际承诺
module.service('Authentication', function ($http, RESTUrl, $q, mytoken) {
var tokenDeferred = $q.deferred();
$http.get(RESTUrl +'?user=currss').then (function (response){
tokenDeferred.resolve(response.data);
}, function (response) {
tokenDeferred.reject(response);
});
this.getToken = function() {
return tokenDeferred.promise;
};
});
然后像这样使用它:
Authentication.getToken().then(
function(data) {
// success function
},function(errMsg) {
// error function
}
)
我将建议您在成功登录后从后端获取令牌,并将此令牌存储到任何服务变量或cookie中。因此,在移动到仪表板之前,通过登录响应,您将令牌存储在应用变量中