Vue中Axios和VantUI的基础使用

1.简介

1.1 Axios

Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js。

用于向 HTTP 服务器发送请求,并处理返回的响应。

Axios 常用于前端开发中,以实现与后端服务器的数据交互,比如获取数据、提交表单等。

1.2 VantUI

Vant 是一个轻量、可靠的移动端 Vue 组件库,

它提供了丰富的组件,用于快速构建移动端应用界面。

通常用于实现移动端应用的各种界面元素和交云功能,如网页布局、导航、按钮链接等...

Vant 4 - A lightweight, customizable Vue UI library for mobile web apps.

2.创建项目文件

创建以trip为名的前后端文件夹:

在trip_client中再创建一个trip_client文件,shift+鼠标右键进入powershell窗口

完成 cd trip-client 、npm install 、npm run dev指令即创建完毕。

3.添加并整理功能性文件夹

3.1 公共的样式

src/assets/style/common.less

3.2 公共js(工具函数、接口地址、配置文件

接口地址配置:src/utils/apis.js

常量配置:src/utils/constants.js

工具函数:src/utils/filters.js

3.3 样式Vue

轮播图区域:src/components/home/Banner.vue

精选区域:src/components/home/Fine.vue

热门区域:src/components/home/Hot.vue

全局脚部分:src/components/common/Footer.vue

注: 可添加<template> </template>

3.4 删除多余文件代码:

src/views/HomeView.vue 除了结构代码都删喽~
src/App.vue :也都删咯~

javascript 复制代码
<script setup>
import { RouterView } from 'vue-router'
</script>
<template>
  <RouterView />
</template>
<style scoped>
</style>

4.Axios使用示例

函数 作用
onMounted 页面元素加载前执行,也称为钩子函数或生命周期函数。
()=>{} ES6提供的 箭头函数,用于执行具体内容。
axios 用于进行异步提交的工具,可以向服务端发起请求,获取服务端响应的数据
get() 以GET提交方式向目标发起请求,参数是请求目标的地址
then() 获取响应数据,将响应的数据传递给resp
=>{} 箭头函数用于处理响应数据的函数

(注意:直接通过当前工程访问目标会触发跨域问题,需要进一步的配置)

(什么是跨域?:通过当前站点访问另一个站点为跨域)

html 复制代码
<!-- 用于处理数据及函数 -->
<script setup>
  import axios from 'axios';//导入axios依赖工具
  import { onMounted } from 'vue';//导入onMounted工具

  onMounted(()=>{
  console.log() 将数据输出到控制台
    axios.get('https://www.baidu.com').then(resp=>{
      console.log('响应返回的数据',resp)
    })
  })
</script>

5.axios请求响应拦截

对axios进行全局配置可提升代码的可维护性

5.1创建文件

src/utils/ajax.js

5.2 设置请求与响应拦截器

#3:创建axios对象

创建并暴露该对象可以被外部访问;

在发送请求时自动包含一些头部信息,此外,我们还设置了这个实例在发送请求时携带 cookies,这样服务器就可以识别出是哪个用户在发送请求。

#10:请求拦截器

参数1,拦截成功,参数2,拦截异常;

两个都传递箭头函数用于数据具体过程;

处理完毕需要放行。

javascript 复制代码
import axios from "axios";

export const ajax = axios.create({
    headers:{
        source:'h5',
        'Content-Type':'application/x-www-from-urlencoded'
    },
    withCredentials:true
})

ajax.interceptors.request.use((req)=>{
    console.log('请求拦截到了')
    return req
},(err)=>{
    return Promise.reject(err)
})

//响应拦截器
ajax.interceptors.response.use((reqs)=>{
    console.log('响应拦截到了')
    return reqs
},(err)=>{
    return Promise.reject(err)
})

# 修改Homeview.vue

如果将来需要修改 axios 的配置或添加新的拦截器,

你只需要修改 @/utils/ajax 文件。这样的封装使得维护和更新变得更加集中和简单。

修改前:import axios, { Axios } from 'axios';

修改后:import { ajax } from '@/utils/ajax';

添加 catch 错误处理部分:

javascript 复制代码
onMounted(()=>{
  ajax.get('https://www.baidu.com').then(resp=>{
    console.log('响应返回的数据',resp)
  }).catch(err => {
    console.log('请求出错',err)
  })
})

5.3 登录拦截

400:参数错误提示

500/504:服务器正忙,网络异常/请求超时

401:未登录,跳转到登录页面

javascript 复制代码
//响应拦截器
ajax.interceptors.response.use((reqs)=>{
    return reqs
},(err)=>{
    if(err.response.status==401){
        window.alert('未登录,即将跳转到登陆页面')
    }
    return Promise.reject(err)
})

6.前端组件开发

6.1 安装VantUI

npm install vant -S

6.2 手动按需导入组件

6.2.1 引入VantUI组件

javascript 复制代码
#引入组件
import Button from 'vant/lib/button';
#引入组件相关样式
import 'vant/lib/button/style'

6.2.2 创建按钮

html 复制代码
<template>
    <Button>我的第一个vant按钮</Button>
</template>

6.3 全局引入

6.3.1 main.js

javascript 复制代码
import Vant from 'vant'
import 'vant/lib/index.css'
app.use(Vant)

6.3.2 组件中

html 复制代码
<template>
    <van-button type="primary">主要按钮</van-button>
</template>

7.创建轮播组件

7.1 Homeview.vue

在home栏完成banner的全局布置

html 复制代码
<script setup>
import { ajax } from '@/utils/ajax';
import { onMounted, ref } from 'vue';//导入onMounted工具
//轮播图数据
  const bannerList = ref([
      {
          id: '1', imgUrl: '/static/home/banner/banner1.jpg'
      }, {
          id: '2', imgUrl: '/static/home/banner/banner2.jpg'
      }, {
          id: '3', imgUrl: '/static/home/banner/banner3.jpg'
      }
  ])
</script>

<!-- 用于显示页面内容 -->
<template>
    <div class="home-banner-box">
    <!-- 轮播图 -->
    <van-swipe class="my-swipe" :autoplay="3000" indicator-color="white">
        <van-swipe-item v-for="item in bannerList" :key="item.id">
            <img :src="item.imgUrl">
        </van-swipe-item>
    </van-swipe>
    </div>
</template>

<!-- 用于美化页面 -->
<style lang="less">
.home-banner-box {
    img {
        width: 100%;
        height: auto;
    }
}
</style>

7.2 轮播代码总概

在Home.vue书写全部过于冗长。

将其内容单独分离出来,并在原home.vue中打上引用,可完成同样的效果。

7.2.1 Banner.vue

javascript 复制代码
<script setup>
import { onMounted, ref } from 'vue';

//轮播图数据
const bannerList = ref([
    {
        id: '1', imgUrl: '/static/home/banner/banner1.jpg'
    }, {
        id: '2', imgUrl: '/static/home/banner/banner2.jpg'
    }, {
        id: '3', imgUrl: '/static/home/banner/banner3.jpg'
    }
])
</script>

<template>
    <div class="home-banner-box">
    <!-- 轮播图 -->
    <van-swipe class="my-swipe" :autoplay="3000" indicator-color="white">
        <van-swipe-item v-for="item in bannerList" :key="item.id">
            <img :src="item.imgUrl">
        </van-swipe-item>
    </van-swipe>
    </div>
</template>

<style lang="less">
.home-banner-box {
    img {
        width: 100%;
        height: auto;
    }
}
</style>

7.2.2 Home.vue

导入了一个名为 Banner 的 Vue 组件:

import Banner from '@/components/home/Banner.vue';

javascript 复制代码
<!-- 用于处理数据及函数 -->
<script setup>
import { ajax } from '@/utils/ajax';
import { onMounted, ref } from 'vue';//导入onMounted工具
import Banner from '@/components/home/Banner.vue';
</script>

<!-- 用于显示页面内容 -->
<template>
    <Banner/>
</template>

<!-- 用于美化页面 -->
<style lang="less">
</style>

7.3 结果视图

相关推荐
还是鼠鼠7 小时前
图书管理系统 Axios 源码__新增图书
前端·javascript·vscode·ajax·前端框架·node.js·bootstrap
还是鼠鼠10 小时前
图书管理系统 Axios 源码 __删除图书功能
前端·javascript·vscode·ajax·前端框架·node.js·bootstrap
好记性+烂笔头11 小时前
4 Spark Streaming
大数据·ajax·spark
还是鼠鼠12 小时前
图书管理系统 Axios 源码__编辑图书
前端·javascript·vscode·ajax·前端框架
Loong_DQX12 小时前
【react+redux】 react使用redux相关内容
前端·react.js·前端框架
黑金IT14 小时前
Python3 + Qt5:实现AJAX异步更新UI
qt·ui·ajax
前端 贾公子17 小时前
前端开发之jsencrypt加密解密的使用方法和使用示例
前端框架
明教卢师傅19 小时前
JavaScript前后端交互-AJAX/fetch
javascript·ajax·交互
海威的技术博客21 小时前
手写MVVM框架-环境搭建
vue.js·前端框架·响应式前端框架
还是鼠鼠1 天前
图书管理系统 Axios 源码__获取图书列表
前端·javascript·ajax·bootstrap