AngularJS + API调用

时间:2017-03-11 05:46:34

标签: javascript angularjs api

当我遇到困难时,试着理解AngularJS是如何工作的,做我的第一次API调用 我想做2个API调用,但我似乎无法使其工作。

在第一个 $ http.get 之后,我想再打一次电话(使用上一次电话中的信息),但由于某种原因这不起作用。 (我没有警觉)

在第一个.get

之后,城市和国家的工作正常

JS:

var app = angular.module('weather', []);

app.controller("weatherCtrl", function($scope, $http) {
    $http.get("http://ipinfo.io/json").then(function(response) {
        $scope.city = response.data.city;
        $scope.country = response.data.country;  

        var apiKey = "";
        var apiCall = "api.openweathermap.org/data/2.5/weather?q=" + response.data.city + "&APPID=" + apiKey;   

        $http.get(apiCall).then(function(responsew) {
            // $scope.temperature would get a value here
            alert("1")
        });
    });
})  

HTML:

<body ng-app="weather" ng-controller="weatherCtrl">
    <h1 class="text-center">Weather</h1>
    <h2 class="text-center">{{city}}, {{country}}</h2>
    <h2 class="text-center">{{temperature}} °C</h2>
</body>

2 个答案:

答案 0 :(得分:2)

您可以使用promise来接听另一个请求,这是推荐的方法,

另一件事是你错过了第二个请求中的 http 部分

<强>代码:

app.controller("weatherCtrl", function ($scope, $http) {

    function infoReq() {
        return $http({
            method: 'Get',
            url: 'http://ipinfo.io/json'
        })
    }

    function weatherReq() {
        var apiKey = "";
        var apiCall = "http://api.openweathermap.org/data/2.5/weather?q=" + $scope.city + "&APPID=" + apiKey;
        return $http({
            method: 'Get',
            url: apiCall,
        })
    }

    $scope.makeRequest = function () {
        infoReq()
            .then(function (response) {
                $scope.city = response.data.city;
                $scope.country = response.data.country;
                return weatherReq();
            })
            .then(function (response) {
                console.log(response.data);
            })


    }

})

答案 1 :(得分:0)

var req = {
 method: 'POST',
 url: "http://api.openweathermap.org/data/2.5/weather?q=" + $scope.city + "&APPID=" + apiKey;
 headers: {
   'Content-Type': undefined
 },
 data: { test: 'test' }
}

$http(req).then(function(){...}, function(){...});

您可以使用上述 http 服务在您的 angularjs 控制器中发出请求。