VueJs Axios和Typescript

时间:2017-11-16 10:43:19

标签: typescript vue.js axios

我被交给了一个基地来开发一个项目。它是在Vue和Typescript中制作的,在网上没有太多支持。

我目前需要进行多次API调用才能检查服务的可用性,并且必须在组件内部执行这些调用。出于某种原因,我无法弄清楚如何做到这一点。

我目前拥有的是:

import * as Vue from 'vue';
import { Component } from 'vue-property-decorator';
import Axios, { AxiosInstance, AxiosRequestConfig, AxiosError, AxiosResponse, AxiosStatic } from 'axios';

@Component({
(...)  
})

export class Something extends Vue {
    public $http: Axios;
constructor() {
    super();
    this.$http = Axios.create({
        baseURL: "https://swapi.co/api/people/1/"
    });
}

testFunc() {
    let data: any;
    this.$http.get("https://swapi.co/api/people/1/", data)
       .then((res: AxiosResponse) => {
        console.log(res.data);
     })
      .catch((ex: any) => {
        console.log(ex);
      });
 }


}

为了让这个工作起作用,我已经改变了几件事,因此我粘贴的代码更像是一个结构而不是其他任何东西。我在视图中也有一个按钮,调用testFunc()。此外,Axios不会被识别为类型,即使我导入“axios”,它也不起作用。 AxiosInstasnce确实有效,但让我无处可去。

1 个答案:

答案 0 :(得分:0)

我将HTTP / REST操作封装在单独的.ts文件中,然后我将其称为组件或从Vuex存储中调用。在这里,我还使用async / await来获得更好的可读性代码。每个方法都声明了其输入和返回类型。

import axios from 'axios'

const http = axios.create({
  baseURL: `${SOME_SERVICE_URL}/base-path`,
  headers: { 'Content-Type': 'application/json' }
})

export async function getItemById (itemId: string): Promise<Item> {
  const response = await http.get(`/${itemId}`)
  return response.data
}

export async function createItem (item: Item): Promise<Item> {
  const response = await http.post('/', JSON.stringify(item))
  return response.data
}