vue--axios异步请求及文件目录结构分析(个人记录)
我这里使用axios进行异步加载
axios是一个库,并不是vue中的第三方插件,使用时不能通过Vue.use()安装插件,需要在原型上进行绑定,即直接在main.js中使用Vue.prototype.$http = axios,然后使用axios.get()等方法
vue-axios是将axios集成到Vue.js的小包装器,协助axios在vue中像插件一样进行安装,即可以使用Vue.use(VueAxios,axios);
首先下载axios、vue-axios:
npm install axios vue-axios -D
结合vuex进行的异步请求封装
//加载vuex,管理数据
npm install vuex -D
//实现数据持久化
npm install vuex-persistedstate -D
1、在src下新建store文件夹,在store文件夹中新建index.js,内容如下:
import Vue from 'vue';
import 'babel-polyfill'
import Vuex from 'vuex';
import common from './modules/common';
import createPersistedState from 'vuex-persistedstate'
//使用 vuex-persistedstate 这是一个用于 vuex 在页面刷新之间处理和存储状态的插件。 Vue.use(Vuex);
export default () => {
return new Vuex.Store({
modules: {
common:common
},
plugins: [createPersistedState()]
})
};
2、在store文件夹中新建modules文件夹,用于区分不同模块管理数据,文件夹中新建一个测试模块common.js,内容如下:
import Lockr from 'lockr'
Lockr.prefix = 'lockr';
import * as asynRequest from '../../asyn_request/home.js'; const state = {
msg:'',//数据
};
const getters = {
getMsg:state => state.msg,
};
const mutations = {
setMsg(state,param){
state.msg = param;
}
};
const actions = {
test_ ({commit},params){
return asynRequest.getTest({commit},params);
}
}
export default {
namespace:true,//单独模块可以写相同名字
state,
getters,
mutations,
actions
}
3、在src下新建utils文件夹,在文件夹中新建http_util.js文件,用于axios封装及异步请求拦截,内容如下:
/*axios异步请求*/
import Vue from 'vue'
import axios from 'axios'
const baseUrl = Vue.prototype.baseUrl;//全局配置的参数 // http request 拦截器
axios.interceptors.request.use(
config => {
return config;//只有return config后,才能成功发送请求
},
err => {
return Promise.reject(err);
}); // http response 拦截器
axios.interceptors.response.use(
response => {
return response;//只有return '数据'后才能完成响应
},
error => {
return Promise.reject(error.response.data) // 返回接口返回的错误信息
}); /*自定义axios异步请求*/
let Axios = axios.create({
baseURL: baseUrl,
timeout: 1000000,// 如果请求的时间超过'timeout',请求将被中止。
responseType:'json',// “responseType”表示服务器将响应的数据类型,包括 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
headers:{
'content-type':'application/x-www-form-urlencoded' //转换为key=value的格式必须增加content-type
},
// transformRequest:[function(data){
// return qs.stringify(data); //利用对应方法转换格式
// }]
}); function httpApi (method, url, params) {
return new Promise((resolve, reject) => {
Axios({
method: method,
url: url,
data: method === 'POST' || method === 'PUT' ? params : null,//data是添加到请求体(body)中的, 用于post请求。post请求的时候不存在params
params: method === 'GET' || method === 'DELETE' ? params : null,//params是添加到url的请求字符串中的,用于get请求。get请求的时候不存在data
}).then(
(response) => {
resolve(response)
}
).catch(
(error) => {
reject(error)
}
)
})
} // 返回在vue模板中的调用接口
export default {
get: function (url, params) {
return httpApi('GET', url, params)
},
post: function (url, params) {
return httpApi('POST', url, params)
},
put: function (url, params) {
return httpApi('PUT', url, params)
},
delete: function (url, params) {
return httpApi('DELETE', url, params)
}
}
4、在src下新建asyn_request文件夹,用于存放不同模块的异步加载方法具体内容,在文件夹下新建测试js文件home.js,内容如下:
import asyn_request from '@/utils/http_util';//引入异步请求封装
const baseUrl = Vue.prototype.baseUrl;//全局配置的参数
import qs from 'qs'; export function getTest({commit},params) {
let url = baseUrl+'XXXXXXXX';
return new Promise((resolve,reject) => {
asyn_request.post(url,qs.stringify(params)).then(
(response) => {
commit('test2','111111111111111111111');
resolve(response)
}
).catch(
(error) => {
reject(error)
}
)
});
}
5、在组件中使用:
先导入import {mapActions} from 'vuex';
在methods中声明 ...mapActions(['test_'])
在mounted中调用方法: this.test_({testMsg:'XXXXXX'}).then((res)=>{console.log(res)}).catch((error)=>{console.log(error)})
项目比较小,这里就没添加统一管理方法名的文件
有什么写的不好的地方,希望可以指出来,大家一起进步
vue--axios异步请求及文件目录结构分析(个人记录)的更多相关文章
- vue axios异步请求django
1,配置请求路径 (1),vue中的请求路径要与django视图路径相同. (2),vue中的路由路径也要和django视图路径相同,比如视图路径为127.0.0.1:8000:home/index, ...
- vue 中使用 async/await 将 axios 异步请求同步化处理
1. axios 常规用法: export default { name: 'Historys', data() { return { totalData: 0, tableData: [] } }, ...
- vue处理异步请求
vue 处理异步请求 项目中需要 先调一个接口去取到人员编号,再去调另一个借口,人员编号作为参数才能去请求数据 用setTimeout 其实也可以,先new了一个promise对象 ,把请求放在里面, ...
- Vue axios异步获取后台数据alert提示undefined
记录一个小问题,关于分页查询套餐 前台通过axios异步请求获取后台数据alert弹出数据提示undefined 下面有三个bean PageResult /** * 分页结果封装对象 */ publ ...
- NuxtJS如何利用axios异步请求
第一种:使用nuxt 提供的 Axios插件 @nuxtjs/axios 1.安装:npm install @nuxtjs/axios -d 2.配置 nuxt.config.js exports d ...
- vue中异步请求渲染问题(swiper不轮播)(在开发过程中遇到过什么问题、踩过的坑)
问题描述: 用vue封装一个swiper组件的时候,发现轮播图不能轮播了. 原因: 异步请求的时间远大于生命周期执行的时间,mounted初始化DOM时数据未返回,渲染数据是空数组,导致轮播图的容器层 ...
- 细说vue axios登录请求拦截器
当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cn ...
- js循环调用axios异步请求,实现同步
准备: const axios = require('axios'); // axios请求 const res = []; const arr = ["a", "b&q ...
- vue axios get请求参数为json对象 而非字符串形式
axios get请求方式 传递给后台的参数都是字符串下形式,无法传递json对象 或数组对象等 post请求方式则可以实现, 但若后台接口要求必须用get方式传递对象给后台,需要装插件,实 ...
随机推荐
- window-server 服务器解决远程连接
mstsc 连接远程服务器,出现黑屏的情况: 解决方案: 运行 -> 输入gpedit.msc,进入组策略 -> 计算机配置 -> 管理模板 -> Windows组件 -> ...
- Pycharm 实现保存时修正格式(format_on_save)
前言 VSCODE是近年来备受欢迎的轻量级代码编辑器,有一项非常实用功能--保存时修正代码格式(formatonsave) Pycharm作为一款IDE,虽然本身不具备此功能,但通过几个并不复杂的设置 ...
- JAVA多线程学习十一-线程锁技术
前面我们讲到了synchronized:那么这节就来将lock的功效. 一.locks相关类 锁相关的类都在包java.util.concurrent.locks下,有以下类和接口: |---Abst ...
- lua语言:string
转载请注明来源:https://www.cnblogs.com/hookjc/ 字符串库函数string.len(s) 返回字符串s的长度:string.rep(s, n) ...
- Spring与Struts2整合时action自动注入的问题
当Struts和Spring框架进行整合时,原本由action实例化对象的过程移交给spring来做(这个过程依赖一个叫struts2-spring-plugin的jar包,这个包主要的功能就是实现刚 ...
- JWT+ASP.NET Core集成方案
JWT JSON Web Token 经过数字签名后,无法伪造,一个能够在各方之间安全的传输JSON对象的开放标准(RFC 7519) 参考前文 [翻译]Introduction to JSON We ...
- 如何快速为团队打造自己的组件库(上)—— Element 源码架构
文章已收录到 github,欢迎 Watch 和 Star. 简介 详细讲解了 ElementUI 的源码架构,为下一步基于 ElementUI 打造团队自己的组件库打好坚实的基础. 如何快速为团队打 ...
- docker基础——3.存储卷
把宿主机的目录或文件链接到容器的目录或文件,可以避免写时复制对高I/O操作的影响,也避免容器销毁时数据丢失. 1. 只指定容器的目录位置,-v docker run -it --name bbox1 ...
- HMS Core助力宝宝巴士为全球开发者展现高品质儿童数字内容
本文分享于HMS Core开发者论坛<宝宝巴士携HMS Core为全球家庭用户提供优质儿童数字内容>采访稿整理 宝宝巴士是国内有着十多年出海经验的开发者,其旗下有超过200多款儿童益智互动 ...
- 配置多个ssh公钥,解决Key is already in use
背景:我已经有一个ssh公钥和私钥了,绑定的是公司的码云 但是绑定github是不允许的 所以我需要在生成一个公钥和私钥 第一步执行下面的命令, 至于如果生成ssh公钥点击这里 ssh-keygen ...