在AngularJS中进行第二次获取请求

Make a second get request in AngularJS

本文关键字:第二次 获取 请求 AngularJS      更新时间:2023-09-26

以下代码有效,我得到了返回的JSON。我感兴趣的是cars_url。如何获取URL(最好的方法是什么),然后进行二次获取请求?

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

如果您想在$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
    });
});