在Vue js中导入axios方法的正确语法

时间:2018-06-18 01:25:06

标签: javascript promise vuejs2 axios

我试图将我的axios调用与我的主vue实例分开,方法是导入它们,而不是直接在创建的钩子中调用它们。

我在一个名为data.js

的单独文件中有这个
import axios from 'axios'
export default{
    myData() {
        return axios.get(`http://localhost:8080/data.json`)
            .then(response => {
                // JSON responses are automatically parsed.
                return response.data;
            })
            .catch(e => {
                return this.myErrors.push(e)
            });
},

在我的vue实例中,我有以下内容:

import myDataApi from '@/api/data.js'

export default {
    name: 'app',
    components: {
        myDataApi, // not sure if this is correct
    },
    data: function () {
        return {
            myInfo: '',
        }
    },
    created() {
        this.myInfo = myDataApi.myData();
        console.log('this.myInfo= ', this.myInfo)
    },

我正在尝试使用myData调用的json填充myInfo。这将在Vue devtools中返回[object Promise],在控制台中返回为Promise {<pending>}

我需要的所有数据都位于名为Promise {<pending>}的数组[[PromiseValue]]:Object内,所以我知道它正在运行,我只需要知道实现它的正确方法。

2 个答案:

答案 0 :(得分:2)

我目前没有启用开发环境来测试它,但我注意到您正在尝试在组件初始化时分配变量。这个对象是一个承诺,但是在你导入它的组件中解析它之后你就​​不会处理它了。

我建议尝试处理实际组件内部的承诺,例如:

import myDataApi from '@/api/data.js'

export default {
    name: 'app',
    components: {
        myDataApi, // not sure if this is correct
    },
    data: function () {
        return {
            myInfo: '',
        }
    },
    created() {
        myDataApi.myData()
          .then((data) => {
            this.myInfo = data
            console.log('this.myInfo= ', this.myInfo);
          });
          .catch((e) => handleError) // however you want to handle it

    },

答案 1 :(得分:1)

只需添加@LexJacobs答案。我省略了.then()中数据的括号,如下所示。 Vue正在咆哮着即使有数据也无法获得数据。这解决了这个问题,虽然老实说我不知道​​为什么。

myDataApi.myData()
    .then(data => {
        this.dataHasLoaded = true;
        this.myInfo = data;
    })
    .catch(e => {
        this.myErrors.push(e)
    });