vue跨域之后怎么在api文件中使用this.$http?

发布于 2022-09-12 03:57:33 字数 1251 浏览 16 评论 0

使用@vue/cli搭建前端项目跑在8080端口,后端使用的是moco server跑在8081端口。准备通过axios实现跨域,已经执行了以下步骤:

// main.js
// 配置baseURL
const http = axios.create({ baseURL: "/api" });
// 挂载
Vue.prototype.$http = http;
// vue.config.js
module.exports = {
  devServer: {
    port: 8080,
    proxy: {
      "/api": {
        ws: false,
        target: "http://localhost:8081",
        changeOrigin: true
      }
    }
  }
};

到这一步,在http://localhost:8080/api/...可以看见moco server提供的数据。
所有的接口都打算整理都api文件夹,以文章详情为例:

// api/index.js
const api = {
  Article: "/articles"
};

export default api;
// api/article.js
import api from "./index";

const axios = this.$http;

export function getArticleDetail(id) {
  return axios({
    url: `${api.Article}/${id}`,
    method: "get"
  });
}

然后在页面直接调用getArticleDetail()但是文章详情页提示:

[vue-router] Failed to resolve async component default: TypeError: Cannot read property '$http' of undefined

我想知道是不是我使用this.$http的方法错了呢?为什么没有识别?还是说整个跨域的方法都错了?希望大家路过可以指导一下,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

秋日私语 2022-09-19 03:57:33
// api/article.js
import api from "./index";
import Vue from "vue"; 

const axios = Vue.$http; // 这些需要用Vue

export function getArticleDetail(id) {
  return axios({
    url: `${api.Article}/${id}`,
    method: "get"
  });
}
半衾梦 2022-09-19 03:57:33

this指向问题,你需要把this指向Vue,才能访问$http。所以你需要在vue页面引入getArticleDetail这个方法,再通过getArticleDetail.call(this, id)类似方式调用,且把getArticleDetail方法里面的axios直接用this.$http代替

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文