在我的AngularJS应用程序中,每次更改我运行的页面的请求:
$rootScope.$on('$locationChangeStart', function (event, next, current) {
var user;
$http.get('/api/Authentication/UserAuthenticated').then(function (data) {
console.log("call");
user = data.data;
});
console.log("end of call");
});
当我运行应用程序并测试正在发生的事情时,我在控制台中看到“{1}}之前返回”结束通话“,这意味着未设置用户。这意味着如果我想检查用户是否登录路线更改用户将是未定义的。
如何制作Angular run-> http请求,然后才继续?
答案 0 :(得分:1)
我误解了这个问题。您可以让$routeProvider解析$http
承诺:
var app = angular.module("myApp");
app.config(["$routeProvider", function($routeProvider) {
$routeProvider.when("/",{
templateUrl: "myTemplate.html",
controller: "MyCtrl",
resolve: {
user: ["$http", "$q", function($http, $q) {
var deferred = $q.defer();
$http.get('/api/Authentication/UserAuthenticated').success(function(data){
deferred.resolve(data.data);
}).error(function(error) {
deferred.resolve(false);
});
return deferred.promise;
}]
}
});
}]);
如果获取用户数据的代码过于复杂,您可以为其创建服务,并将该服务注入$routeProvider
的{{1}}函数。
在您的控制器中,您只需注入承诺(将予以解决):
resolve
答案 1 :(得分:0)
使用async:false
。这对我有用
尝试使用此代码,而不是代码
$rootScope.$on('$locationChangeStart', function (event, next, current) {
$http({method: 'GET',
url: '/api/Authentication/UserAuthenticated',
async: false
}).success(function (data) {
console.log("call");
user = data.data;
}
console.log("end of call");
});