首頁 > web前端 > Vue.js > vue3 axios的使用介紹及資料渲染

vue3 axios的使用介紹及資料渲染

藏色散人
發布: 2022-08-09 16:14:18
轉載
4310 人瀏覽過

本篇文章為大家介紹如何使用axios方式呼叫介面以及所取得的資料渲染,希望對需要的朋友有幫助!

1、axios的作用是什麼呢?

axios主要是用於向後台發起請求的,還有在請求中做更多是可控功能。 【相關推薦:vue.js影片教學

2、專案安裝axios及其他環境

 開啟cmd進入專案根目錄(src同級目錄) ,輸入指令    npm install axios

3、新建##axios.js     內容複製以下

 

axios.js 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

import axios from "axios";

import qs from "qs";

 

// axios.defaults.baseURL = ''  //正式

axios.defaults.baseURL = 'http://localhost:8099' //测试

 

//post请求头

axios.defaults.headers.post["Content-Type"] ="application/x-www-form-urlencoded;charset=UTF-8";

//设置超时

axios.defaults.timeout = 10000;

 

axios.interceptors.request.use(

    config => {

        return config;

    },

    error => {

        return Promise.reject(error);

    }

);

 

axios.interceptors.response.use(

    response => {

        if (response.status == 200) {

            return Promise.resolve(response);

        else {

            return Promise.reject(response);

        }

    },

    error => {

        alert(`异常请求:${JSON.stringify(error.message)}`)

    }

);

export default {

    post(url, data) {

        return new Promise((resolve, reject) => {

 

            axios({

                method: 'post',

                url,

                data: qs.stringify(data),

            })

                .then(res => {

                    resolve(res.data)

                })

                .catch(err => {

                    reject(err)

                });

        })

    },

 

    get(url, data) {

        return new Promise((resolve, reject) => {

            axios({

                method: 'get',

                url,

                params: data,

            })

                .then(res => {

                    resolve(res.data)

                })

                .catch(err => {

                    reject(err)

                })

        })

    }

};

登入後複製

4、直接在vue頁引用, axios.get.post方法

(vue2需要在main.js中掛載全域,vue3每次引用都需要  import,感覺有些臃腫)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

<template>

    <div>

        <table>

            <tr>

                <td>编号</td>

                <td>图书名称</td>

                <td>作者</td>

            </tr>

            <tr v-for="item in books">

                <td>{{item.id}}</td>

                <td>{{item.name}}</td>

                <td>{{item.author}}</td>

            </tr>

        </table>

        请求状态码:{{code}},请求状态:{{msg}}

    </div>

</template>

<script>

    import axios from &#39;../js/axios&#39;;

  

    export default {

        name: "Book",

        data() {

            return {

                code: "",

                msg: "",

                books: [],

            }

        },

        created() {   //生命周期函数(或者 mounted 函数)调用的方法才能运行

            this.getShops();

        },

        methods: {

            getShops: function () {

                const vm = this;

                axios.get("/book/findAll", {

                    // id: 1

                }).then(function (response) {

                    console.log(response.data);

                    let results = response.data || [];

                    let code = response.code;

                    let msg = response.msg;

                    if (results && results.length > 0) {

                        // 获取搜索到的商品

                        vm.code = code;

                        vm.msg = msg;

                        vm.books = results;

                    }

                }).catch(function (error) {

                    console.log(error);

                    vm.code = 0;

                    vm.msg = error;

                    vm.books = [];

                })

            }

        }

    }

</script>

登入後複製

展示運作效果

後端介面:

 前端展示:

 

5、踩坑記錄

問題1:vue3 axios Error: Network Error 

跨域請求問題,我是在後端攔截器類別中處理的,重寫addCorsMappings 方法

1

2

3

4

5

6

7

8

9

//跨域问题

 @Override

 public void addCorsMappings(CorsRegistry registry) {

     registry.addMapping("/**")

             .allowedHeaders("*")

             .allowedMethods("*")

             .allowedOriginPatterns("*")

             .allowCredentials(true);

 }

登入後複製

問題2:Cannot set properties of undefined (setting 'books')

             或者ReferenceError: books is not defined

不能直接給變量賦值,需要透過  methods 方法中 

const vm = this; 取得變數賦值;

vue 請求介面程式碼需要放置methods,且在created()或mounted()週期函數中呼叫該方法。

1

2

3

4

5

6

7

8

created() {   //生命周期函数(或者 mounted 函数)调用的方法才能运行

    this.getShops();

},

methods: {

    getShops: function () {

    const vm = this;   //传获取的结果 给页面

    }

}

登入後複製

問題3:Uncaught ReferenceError: Vue is not defined

           或Cannot read properties of undefined (reading 'get')

##vue3不是透過後面物件掛載,我每個頁面直接引用了axios(目前vue3好像只有這種方式)

# 6、vue3入門總結

入門前一定要先認真閱讀vue官網(https://v3.cn.vuejs.org/),了解常見函數及一些基礎的用法。才能在開發中減少踩坑! ! !

以上是vue3 axios的使用介紹及資料渲染的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
javascript - Vue 未定義
來自於 1970-01-01 08:00:00
0
0
0
javascript - 如何在vue-router中存取VUE實例?
來自於 1970-01-01 08:00:00
0
0
0
javascript - vue-for-idea
來自於 1970-01-01 08:00:00
0
0
0
沒看過VUE的專案實戰
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板