Javascript AngularJS:$routeProvider when resolve$http返回响应obj而不是我的obj
我正在尝试解决几个ajax调用,以便在控制器(以及它提供的指令)执行之前,可以获得控制器所需的数据。执行顺序正常,但是,注入控制器的结果不是返回我创建的对象,而是$http的响应对象:Javascript AngularJS:$routeProvider when resolve$http返回响应obj而不是我的obj,javascript,angularjs,resolver,route-provider,Javascript,Angularjs,Resolver,Route Provider,我正在尝试解决几个ajax调用,以便在控制器(以及它提供的指令)执行之前,可以获得控制器所需的数据。执行顺序正常,但是,注入控制器的结果不是返回我创建的对象,而是$http的响应对象: { config: { … }, data: { … }, headers: { … }, status: 200 } 我的代码基本上如下所示: app.config([ '$routeProvider', function($routeProvider) { $routePro
{
config: { … },
data: { … },
headers: { … },
status: 200
}
我的代码基本上如下所示:
app.config([
'$routeProvider', function($routeProvider)
{
$routeProvider
.when('/path', {
…,
"resolve": {
"data": [
'$http',
function($http)
{
return $http
.get('/api/data')
.success(function(data,status) { return data.rows[0]; })
.error(function(data,status) { return false; });
}
]
}
});
}
]);
我傻吗?$http成功的返回值不应该是$http返回的值吗
我也试过了
…
"resolve": {
"data": [
'$http',
function($http)
{
var response;
$http
.get('/api/data')
.success(function(data,status) { response = data.rows[0]; })
.error(function(data,status) { response = false; });
return response;
}
]
}
但是注入控制器的数据
对象没有定义(我猜是因为$http是异步的,resolve
没有被$http阻止,所以它在$http准备就绪之前返回)
另外,$http的同步性应该可以在其选项对象中定义
解决方案
感谢和
p.S.then()
记录在
$http@returns{HttpPromise}返回一个{@link ng.$q promise}对象
和
标准的then
方法和两种特定于http的方法:success
和error
。然后
方法接受两个参数:success和error回调,将使用
响应对象。success
和error
方法采用一个参数,即
将在请求成功或失败时分别调用。这些论点被传递到
这些函数是传递到
然后
方法。响应对象具有以下属性:
你需要回报一个承诺。请看,社区维基的答案。我以前使用的是
$http.get(“…”).then()
(我认为这是一种$promise
方法),但我需要成功
和错误
方法(我不想设置任意延迟/超时,只要在完成后继续,grr)。如果答案在那里,为什么不将其作为实际答案发布呢?如果文档中给出了如何使用然后及其回调的示例,那就太好了:/Ohh,“>$q
's docs”promise中有一个示例,它通过successCallback的返回值errorCallback解决或拒绝(除非该值是一个承诺,在这种情况下,它将使用该承诺中使用承诺链解析的值进行解析)。“TLDR–从$q返回您想要的任何内容。然后,在上述解决方案中成功回调/errorCallback。
app.config([
'$routeProvider', function($routeProvider)
{
$routeProvider
.when('/path', {
…,
"resolve": {
"data": [
'$http',
function($http)
{
return $http
.get('/api/data')
.then(
function success(response) { return response.data.rows[0]; },
function error(reason) { return false; }
);
}
]
}
});
}
]);