在.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');
});
})
答案 0 :(得分:0)
不可能。同样强制Angular,一般来说,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
}
)
答案 1 :(得分:0)
我会建议您在成功登录时从后端获取令牌,并将此令牌存储到任何服务变量或cookies.so,然后再移动到仪表板,通过登录响应,您将令牌存储在app变量中。