2013-11-22 4 views
0

Следующий код работает, и я получаю JSON ниже, возвращенный. Меня интересует cars_url. Как я могу получить URL(и как это лучше всего), а затем сделать запрос на получение вторичного запроса?Сделайте запрос на второй запрос в AngularJS

JSON

{ 
    created: "2013-11-08T18:57:44", 
    domain: "www.test.com", 
    cars_url: "/api/v1/carlot/4", 
    image: null, 
    modified: "2013-11-08T18:57:44" 
} 

JavaScript

app.factory('CbgenRestangular', function(Restangular) { 
    return Restangular.withConfig(function(RestangularConfigurer) { 
     RestangularConfigurer.setBaseUrl('http://127.0.0.1:8000'); 
    }); 
}); 


app.controller("CampaignData" , 
       [ 
        '$scope', 
        'Restangular', 
        'CbgenRestangular', 
        function($scope, Restangular, CbgenRestangular){ 
         CbgenRestangular.one('api/v1/person', "james").get().then(
          function(person) { 
           $scope.person = person; 
           console.log(person) 
          } 
         ); 
        } 
       ]); 

ответ

1
app.controller("CampaignData" , ['$scope', 'Restangular', 'CbgenRestangular', '$http', 
    function($scope, Restangular, CbgenRestangular, $http){ 

     CbgenRestangular.one('api/v1/person', "james").get().then(function(person) { 
       $scope.person = person; 
       console.log(person); 
       var cars = $http({method: 'GET', url:person.cars_url); 
       cars.then(function(data){ 
        // do success things here 
       }, function(data){ 
        /do error things here 
       }); 
      } 
     ); 

}]); 

Вложенные запросы могут запутаться, если у вас есть более чем на один уровень. В этом случае вы должны использовать $ q для управления потоком запросов.

app.controller("CampaignData" , ['$scope', 'Restangular', 'CbgenRestangular', '$http', '$q', 
    function($scope, Restangular, CbgenRestangular, $http, $q){ 
    $scope.person = {cars_url:"your 404 url here"}; 

    var personcall = CbgenRestangular.one('api/v1/person', "james").get(); 
    $q.when(personcall.then(
     function(person) { 
      $scope.person = person; 
      console.log(person); 
     } 
    )) 
    .then(function(){ 
     var cars = $http({method: 'GET', url:$scope.person.cars_url); 
     cars.then(function(data){ 
      // do success things here 
     }, function(data){ 
      /do error things here 
     }); 
    }); 
}]); 
1

Если вы хотите сделать это в любое время $scope.person изменения (что происходит в ответ от person запроса), вы можете настроить в контроллере в $watch.

$scope.$watch('person', function(newPerson, oldPerson){ 
    // Ignore Angular's initial broadcast 
    if(!newPerson){ 
     return false; 
    } 
    CbgenRestangular.one(newPerson.cars_url).get().then(function(data){ 
     // Deal with cars data 
    }); 
}); 
Смежные вопросы