利用Vue 3和Axios从第三方API获取异步数据并展示

打印 上一主题 下一主题

主题 814|帖子 814|积分 2442

在前端开发中,从第三方 API 获取数据并动态展示黑白常常见且重要的需求之一。今天我们将深入探讨怎样利用 Vue 3 和 Axios 从第三方 API 获取异步数据并将其展示在页面上。通过这个例子,你将了解怎样在 Vue 3 中集成 Axios,怎样进行异步请求,以及怎样动态地将数据绑定到模板以实现实时内容更新。
前置条件

在开始之前,请确保你已经具备以下条件:

  • 安装了 Node.js 和 npm。
  • 基本了解 Vue.js 和 JavaScript。
创建一个新的 Vue 3 项目

起首,我们需要创建一个新的 Vue 3 项目。假如你还没有安装 Vue CLI,可以利用以下下令进行安装:
  1. npm install -g @vue/cli
复制代码
安装完成后,利用以下下令创建一个新的 Vue 项目:
  1. vue create vue-axios-demo
复制代码
选择默认配置或根据需求自界说配置。创建项目后,进入项目目录:
  1. cd vue-axios-demo
复制代码
安装 Axios

Axios 是一个基于 Promise 的 HTTP 客户端,用于在浏览器和 Node.js 中发出 HTTP 请求。我们需要在项目中安装 Axios:
  1. npm install axios
复制代码
项目布局

项目标基础布局如下:
  1. vue-axios-demo
  2. ├── node_modules
  3. ├── public
  4. ├── src
  5. │   ├── assets
  6. │   ├── components
  7. │   ├── views
  8. │   ├── App.vue
  9. │   ├── main.js
  10. ├── .gitignore
  11. ├── babel.config.js
  12. ├── package.json
  13. ├── README.md
  14. └── vue.config.js
复制代码
创建组件

在 src/components 目录下创建一个新的组件文件 DataFetcher.vue,这个组件将用于从第三方 API 获取数据并展示。
文件内容如下:
  1. <template>
  2.   <div class="data-fetcher">
  3.     <h1>Data from Third-Party API</h1>
  4.     <div v-if="loading">Loading...</div>
  5.     <div v-if="error">{{ error }}</div>
  6.     <ul v-if="data">
  7.       <li v-for="item in data" :key="item.id">{{ item.name }}</li>
  8.     </ul>
  9.   </div>
  10. </template>
  11. <script>
  12. import axios from 'axios';
  13. export default {
  14.   name: 'DataFetcher',
  15.   data() {
  16.     return {
  17.       data: null,
  18.       loading: true,
  19.       error: null,
  20.     };
  21.   },
  22.   created() {
  23.     this.fetchData();
  24.   },
  25.   methods: {
  26.     async fetchData() {
  27.       try {
  28.         const response = await axios.get('https://api.exapmle.com/data'); // 替换为实际API地址
  29.         this.data = response.data;
  30.       } catch (err) {
  31.         this.error = 'Failed to load data';
  32.       } finally {
  33.         this.loading = false;
  34.       }
  35.     },
  36.   },
  37. };
  38. </script>
  39. <style scoped>
  40. .data-fetcher {
  41.   padding: 20px;
  42. }
  43. .loading {
  44.   font-size: 1.5em;
  45.   color: #666;
  46. }
  47. .error {
  48.   color: red;
  49. }
  50. ul {
  51.   list-style-type: none;
  52.   padding: 0;
  53. }
  54. li {
  55.   background: #f4f4f4;
  56.   margin: 10px 0;
  57.   padding: 10px;
  58.   border-radius: 4px;
  59. }
  60. </style>
复制代码
更新主应用组件

如今,我们需要将创建的 DataFetcher 组件添加到我们的主应用组件 App.vue 中。
更新 src/App.vue 文件如下:
  1. <template>
  2.   <div id="app">
  3.     <DataFetcher />
  4.   </div>
  5. </template>
  6. <script>
  7. import DataFetcher from './components/DataFetcher.vue';
  8. export default {
  9.   name: 'App',
  10.   components: {
  11.     DataFetcher,
  12.   },
  13. };
  14. </script>
  15. <style>
  16. #app {
  17.   font-family: Avenir, Helvetica, Arial, sans-serif;
  18.   -webkit-font-smoothing: antialiased;
  19.   -moz-osx-font-smoothing: grayscale;
  20.   text-align: center;
  21.   color: #2c3e50;
  22.   margin-top: 60px;
  23. }
  24. </style>
复制代码
运行项目

一切就绪之后,可以运行项目,查看效果:
  1. npm run serve
复制代码
打开浏览器,访问 http://localhost:8080,你应该会看到从第三方 API 获取的动态数据。
解释代码


  • 模板部门(template):

    • 利用 v-if 指令条件性地渲染内容。<div v-if="loading"> 仅在加载数据时体现。
    • 展示错误信息时利用 <div v-if="error">{{ error }}</div>。
    • 利用 v-if 指令检查数据是否存在,并利用 v-for 指令循环渲染数据列表。

  • 数据部门(data):

    • 界说了三个数据属性:data 用于存储从 API 获取的数据,loading 表示加载状态,error 用于存储错误信息。

  • 生命周期钩子(created):

    • 在组件创建时,调用 fetchData 方法获取数据。

  • 方法部门(methods):

    • fetchData 方法利用了 async/await 语法进行异步数据请求。
    • 利用 Axios 的 get 方法发送 HTTP GET 请求以获取数据。
    • 请求乐成时将响应数据存储到 data 属性中。
    • 请求失败时,将错误信息存储到 error 属性。
    • 最后,无论请求乐成或失败,都将 loading 设置为 false 以停止加载状态。

总结

通过本文,我们实现了利用 Vue 3 和 Axios 从第三方 API 获取异步数据并展示。在前端开发中,把握从 API 获取数据并渲染到页面黑白常重要的技能。

最后问候亲爱的朋友们,并邀请你们阅读我的全新著作


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表