如何使用Vue.js访问API?

the*_*777 7 javascript api json vue.js vue-resource

我是JavaScript和Vue.js的新手,我在使用Vue.js访问api时遇到了问题.我正在尝试访问的API具有如下所示的JSON:

{
    "coord": {
        "lon": -88.99,
        "lat": 40.51
    },
    "weather": [
        {
            "id": 800,
            "main": "Clear",
            "description": "clear sky",
            "icon": "01n"
        }
    ],
    "base": "stations",
    "main": {
        "temp": 2.09,
        "pressure": 1022.3,
        "humidity": 69,
        "temp_min": 2.09,
        "temp_max": 2.09,
        "sea_level": 1052.03,
        "grnd_level": 1022.3
    },
    "wind": {
        "speed": 12.66,
        "deg": 205.502
    },
    "clouds": {
        "all": 0
    },
    "dt": 1482203059,
    "sys": {
        "message": 0.186,
        "country": "US",
        "sunrise": 1482239741,
        "sunset": 1482273134
    },
    "id": 4903780,
    "name": "Normal",
    "cod": 200
}
Run Code Online (Sandbox Code Playgroud)

它上面的API链接是有效的,但是当我运行程序时,我不认为我正在访问它.即使我不尝试解析JSON并只显示从api收集的所有数据,我的变量仍然是空的.所以,我必须做错了才能访问api.此外,在访问api之后,将像这样工作解析它:例如,访问标签"temp"=>"data.main.temp"

var weather = new Vue({
        el: '#weather',

        data: {
            getTemp: ''
        },

        created: function () {
            this.fetchData();
        },        

        methods: {
            fetchData: function () {
                this.$http.get('api.openweathermap.org/data/2.5/weather?q=Normal&units=imperial&APPID=MYAPPID'),
                    function (data) {
                        this.getTemp = data.main.temp;
                    }
            }
        }

    })
    ;
Run Code Online (Sandbox Code Playgroud)

HTML代码:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/vue.resource/1.0.3/vue-resource.min.js"></script>
</head>

<body>
<div id="weather">
    {{getTemp}}
</div> <!--end of weather-->
</body>

<script src="app.js"></script>

</html>
Run Code Online (Sandbox Code Playgroud)

Sau*_*abh 8

我看到范围为的问题,黑色this内的this更改范围$http.get,您需要进行以下更改:

    methods: {
        fetchData: function () { 
            var vm = this
            this.$http.get('api.openweathermap.org/data/2.5/weather?q=Normal&units=imperial&APPID=MYAPPID'),
                function (data) {
                    vm.getTemp = data.main.temp;
                }
        }
    }
Run Code Online (Sandbox Code Playgroud)

您也可以在这里查看我的类似答案。