繁体   English   中英

AngularJS:$ routeProvider解析$ http时返回响应obj而不是我的obj

[英]AngularJS: $routeProvider when resolve $http returns response obj instead of my obj

我正在尝试解决几个Ajax调用,以便在执行控制器(及其提供的指令)之前可以使用控制器需要的数据。 执行的顺序有效,但是,没有返回我创建的对象,而是将注入到控制器中的结果是$ http的响应对象:

{
  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;
    }
  ]
}

但是然后,注入到我的控制器中的data对象是不确定的(我猜是因为$ http是异步的,而且$ http没有阻止resolve -因此它在$ http准备就绪之前就返回了)。

PS $ http的同步性应该在其options对象中定义!

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; }
                );
            }
          ]
        }
      });
  }
]);

感谢Ajay beniwal的指针Mark Rajcok的指针

PS then()$ q的page中记录

$ http @returns {HttpPromise}返回一个{@link ng。$ q promise}对象,该对象具有标准的then方法和两个特定于http的方法: successerror then方法接受两个参数成功和错误回调,将使用响应对象调用该回调。 successerror方法采用单个参数-该函数将在请求成功或失败时分别调用。 传递给这些函数的参数是传递给then方法的响应对象的结构化表示。 响应对象具有以下属性:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM