H5 app axios请求拦截+动画+注册实现

请求拦截器和响应拦截器主用来控制状态管理vuex中loading标志是否为true

请求开始 loading为true,出现遮罩加loading标志,请求结束,这俩都消失

使用到了vant2组件(vue组件中引入loading组件和样式)

- api/axios.js 请求拦截器和响应拦截器:

//对axios 进行二次封装  主要使用请求拦截器 和响应拦截器
import axios from 'axios';
// 引入仓库
import store from '@/store';

const request = axios.create({
	// 基础路径
	baseURL:'http://localhost:3005/api',
	timeout:5000,

})
//请求拦截器
request.interceptors.request.use((config)=>{
	// 加载中动画
	store.commit("loadingOpt/LOADING");
	// config: 配置对象, 可以配置headers
	return config;
})

//响应拦截器
// 成功回调会返回服务器数据      失败回调报错原因
request.interceptors.response.use((res)=>{
	// 关闭加载中动画
	store.commit("loadingOpt/NOLOADING");
	// 服务器响应数据回来之后
	return res.data;
},(err)=>{
	// 响应失败回调(可以终结premise链)
	return Promise.reject(new Error("fail"));
})

export default request;

- api/index.js 接口统一管理

// 对API进行统一管理
import axios from '@/api/axios';

export const Register=(params)=>{
	// axios返回结果是promise对象
	return axios({url:'/saveUser',method:'post',data:params});
}

- 小仓库

(小仓库开启命名空间 大仓库引入直接导出)

const loadingOpt = {
	namespaced: true,
	state: {
		isLoading: false
	},
	actions: {

	},
	mutations: {
		LOADING(state,val) {
			state.isLoading=true;
		},
		NOLOADING(state,val) {
			state.isLoading=false;
		}
	},
	getters: {}
};

export default loadingOpt;

- 大仓库

import Vue from "vue"
import Vuex from "vuex"
// 引入加载模块仓库
import loadingOpt from '@/store/loading';

Vue.use(Vuex);

export default new Vuex.Store({
	modules:{
		loadingOpt
	}
})

- 登陆组件内

// 引入注册api模块
import {Register} from '@/api'
      let params={
        name:this.name,
        username:this.username,
        password:this.password
      }
      let res = await Register(params);

实现效果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值