当前位置:   article > 正文

vue3入门 ----使用axios方式调用接口且获取的数据渲染_vue3 axios请求且渲染table

vue3 axios请求且渲染table

1、axios的作用是什么呢?

axios主要是用于向后台发起请求的,还有在请求中做更多是可控功能。

2、项目安装axios及其他环境

 打开cmd 进入项目根目录(src同级目录) ,输入命令    npm install axios

3、新建axios.js     内容复制以下

 axios.js 

  1. import axios from "axios";
  2. import qs from "qs";
  3. // axios.defaults.baseURL = '' //正式
  4. axios.defaults.baseURL = 'http://localhost:8099' //测试
  5. //post请求头
  6. axios.defaults.headers.post["Content-Type"] ="application/x-www-form-urlencoded;charset=UTF-8";
  7. //设置超时
  8. axios.defaults.timeout = 10000;
  9. axios.interceptors.request.use(
  10. config => {
  11. return config;
  12. },
  13. error => {
  14. return Promise.reject(error);
  15. }
  16. );
  17. axios.interceptors.response.use(
  18. response => {
  19. if (response.status == 200) {
  20. return Promise.resolve(response);
  21. } else {
  22. return Promise.reject(response);
  23. }
  24. },
  25. error => {
  26. alert(`异常请求:${JSON.stringify(error.message)}`)
  27. }
  28. );
  29. export default {
  30. post(url, data) {
  31. return new Promise((resolve, reject) => {
  32. axios({
  33. method: 'post',
  34. url,
  35. data: qs.stringify(data),
  36. })
  37. .then(res => {
  38. resolve(res.data)
  39. })
  40. .catch(err => {
  41. reject(err)
  42. });
  43. })
  44. },
  45. get(url, data) {
  46. return new Promise((resolve, reject) => {
  47. axios({
  48. method: 'get',
  49. url,
  50. params: data,
  51. })
  52. .then(res => {
  53. resolve(res.data)
  54. })
  55. .catch(err => {
  56. reject(err)
  57. })
  58. })
  59. }
  60. };

4、直接在vue页面引用,axios.get或者.post方法

vue2需要在main.js中挂载全局,vue3每次引用都需要  import,感觉有些臃肿)。

  1. <template>
  2. <div>
  3. <table>
  4. <tr>
  5. <td>编号</td>
  6. <td>图书名称</td>
  7. <td>作者</td>
  8. </tr>
  9. <tr v-for="item in books">
  10. <td>{{item.id}}</td>
  11. <td>{{item.name}}</td>
  12. <td>{{item.author}}</td>
  13. </tr>
  14. </table>
  15. 请求状态码:{{code}},请求状态:{{msg}}
  16. </div>
  17. </template>
  18. <script>
  19. import axios from '../js/axios';
  20. export default {
  21. name: "Book",
  22. data() {
  23. return {
  24. code: "",
  25. msg: "",
  26. books: [],
  27. }
  28. },
  29. created() { //生命周期函数(或者 mounted 函数)调用的方法才能运行
  30. this.getShops();
  31. },
  32. methods: {
  33. getShops: function () {
  34. const vm = this;
  35. axios.get("/book/findAll", {
  36. // id: 1
  37. }).then(function (response) {
  38. console.log(response.data);
  39. let results = response.data || [];
  40. let code = response.code;
  41. let msg = response.msg;
  42. if (results && results.length > 0) {
  43. // 获取搜索到的商品
  44. vm.code = code;
  45. vm.msg = msg;
  46. vm.books = results;
  47. }
  48. }).catch(function (error) {
  49. console.log(error);
  50. vm.code = 0;
  51. vm.msg = error;
  52. vm.books = [];
  53. })
  54. }
  55. }
  56. }
  57. </script>

展示运行效果

后端接口:

 前端展示:

 5、踩坑记录

问题1:vue3 axios Error: Network Error 

跨域请求问题,我是在后端拦截器类中处理的 ,重写 addCorsMappings 方法

  1. //跨域问题
  2. @Override
  3. public void addCorsMappings(CorsRegistry registry) {
  4. registry.addMapping("/**")
  5. .allowedHeaders("*")
  6. .allowedMethods("*")
  7. .allowedOriginPatterns("*")
  8. .allowCredentials(true);
  9. }

问题2:Cannot set properties of undefined (setting 'books')

             或者ReferenceError: books is not defined

不能直接给变量赋值,需要通过  methods 方法中 const vm = this; 获取变量赋值;

vue 请求接口代码需要放置methods,且在created()或者mounted()周期函数中调用该方法。

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不是通过Vue对象挂载,后面我每个页面直接引用了axios(目前vue3好像只有这种方式)

 6、vue3入门总结

入门前一定要先认真阅读vue官网(https://v3.cn.vuejs.org/),了解常见函数及一些基础的用法。在开发中才能减少踩坑!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/257182
推荐阅读
相关标签
  

闽ICP备14008679号