【问题标题】:Axios is not defined in VueVue中没有定义axios
【发布时间】:2019-04-05 05:48:28
【问题描述】:

我正在尝试从 Wordpress API 获取数据。我的控制台向我抛出一个错误“未定义 axios”。 这是我的 post.vue 组件。

        <template>
        <div>
    <table class="table is-bordered">
                <thead>
                    <tr>
                        <th>Title</th>
                        <th>Posted at</th>
                    </tr>
                </thead>
                <tbody>
                    <tr v-for="post in posts" :key="post.id">
                        <td>{{post.title.rendered}}</td>
                        <td>{{post.date_gmt}}</td>
                    </tr>
                </tbody>
            </table>

            <pagination :pagination="pagination"
                        @prev="--postsData.page; getPosts();"
                        @next="postsData.page++; getPosts();">
            </pagination>
        </div>

    </template>


<script>
    import pagination from './pagination.vue'
    export default {
        mounted() {
            this.getPosts();
        },
        components: {
            'pagination': pagination
        },
        data() {
            return {
                postsUrl: 'http://localhost:8080/wp-json/wp/v2/posts',
                posts: [],
                postsData: {
                    per_page: 10,
                    page: 1
                },
                pagination: {
                    prevPage: '',
                    nextPage: '',
                    totalPages: '',
                    from: '',
                    to: '',
                    total: '',
                },
            }
        },
        methods: {

            getPosts() {
                axios
                .get(this.postsUrl, {params: this.postsData})
                    .then((response) => {
                        this.posts = response;
                        this.configPagination(response.headers);
                    })
                    .catch( (error) => {
                        console.log(error);
                    });
            },
            configPagination(headers) {
                this.pagination.total = +headers['x-wp-total'];
                this.pagination.totalPages = +headers['x-wp-totalpages'];
                this.pagination.from = this.pagination.total ? ((this.postsData.page - 1) * this.postsData.per_page) + 1 : ' ';
                this.pagination.to = (this.postsData.page * this.postsData.per_page) > this.pagination.total ? this.pagination.total : this.postsData.page * this.postsData.per_page;
                this.pagination.prevPage = this.postsData.page > 1 ? this.postsData.page : '';
                this.pagination.nextPage = this.postsData.page < this.pagination.totalPages ? this.postsData.page + 1 : '';
            }
        }
    }
</script>

我真的不知道这里出了什么问题,我安装了axios,npm install axios,

这是我的 main.js 文件

import Vue from 'vue'
import App from './App.vue'
import posts from "./components/posts.vue";
import axios from "axios";
import VueAxios from 'vue-axios'
Vue.use(VueAxios, axios)

Vue.prototype.$axios = axios;

Vue.component('posts', posts);

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

谁能帮我解决这个问题?没看明白哪里错了?

谢谢大家

【问题讨论】:

  • 你运行过'npm install axios --save'吗?
  • 谢谢,现在我有错误“无法读取未定义的'rendered'属性”?
  • 你还需要将 axios 导入到你的 vue 组件中。

标签: javascript vue.js axios vue-component


【解决方案1】:

您需要将import axios from 'axios' 添加到您的组件中。最好在 src 目录中创建一个名为 api.js 的配置文件并添加如下内容:

import axios from 'axios';

export default axios.create({
    baseURL: `http://127.0.0.1:8000/`,
    headers: {
        'Content-Type': 'application/json',
        'Authorization': "JWT " + localStorage.getItem('token')
    },
    xsrfCookieName: 'csrftoken',
    xsrfHeaderName: 'X-CSRFToken',
    withCredentials: true
});

然后在您的组件中像这样导入:

import API from '../api'

用 API.get 代替 axios.get

这是有益的,因为:

  • 当您需要更改时,您不必在 30 处更改基本 URL。
  • 您不必在 axios 调用中一遍又一遍地添加相同的标头。
  • 您可以像这样在调用中使用较短的网址:

    API.get('foo/bar/') .then(response => { }

【讨论】:

  • axios 包是否被列为默认包?为什么不 {axios}
  • 是的,这是默认设置,如果不是,则不会导入。相反,它不是命名导入,因此您不能使用仅用于命名导入的花括号导入它。默认导入不能使用命名导入的语法导入,即大括号。
  • 如果是NUXT应用,不用在你的组件中导入axios,你可以通过调用this.$axios.methodthis.$axios.$method从应用的任何地方访问axios。其中方法可以是getpostdelete
猜你喜欢
  • 2022-01-26
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2020-12-09
  • 2016-07-12
  • 2019-01-05
  • 1970-01-01
相关资源
最近更新 更多