我这里使用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异步请求及文件目录结构分析(个人记录)的更多相关文章

  1. vue axios异步请求django

    1,配置请求路径 (1),vue中的请求路径要与django视图路径相同. (2),vue中的路由路径也要和django视图路径相同,比如视图路径为127.0.0.1:8000:home/index, ...

  2. vue 中使用 async/await 将 axios 异步请求同步化处理

    1. axios 常规用法: export default { name: 'Historys', data() { return { totalData: 0, tableData: [] } }, ...

  3. vue处理异步请求

    vue 处理异步请求 项目中需要 先调一个接口去取到人员编号,再去调另一个借口,人员编号作为参数才能去请求数据 用setTimeout 其实也可以,先new了一个promise对象 ,把请求放在里面, ...

  4. Vue axios异步获取后台数据alert提示undefined

    记录一个小问题,关于分页查询套餐 前台通过axios异步请求获取后台数据alert弹出数据提示undefined 下面有三个bean PageResult /** * 分页结果封装对象 */ publ ...

  5. NuxtJS如何利用axios异步请求

    第一种:使用nuxt 提供的 Axios插件 @nuxtjs/axios 1.安装:npm install @nuxtjs/axios -d 2.配置 nuxt.config.js exports d ...

  6. vue中异步请求渲染问题(swiper不轮播)(在开发过程中遇到过什么问题、踩过的坑)

    问题描述: 用vue封装一个swiper组件的时候,发现轮播图不能轮播了. 原因: 异步请求的时间远大于生命周期执行的时间,mounted初始化DOM时数据未返回,渲染数据是空数组,导致轮播图的容器层 ...

  7. 细说vue axios登录请求拦截器

    当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cn ...

  8. js循环调用axios异步请求,实现同步

    准备: const axios = require('axios'); // axios请求 const res = []; const arr = ["a", "b&q ...

  9. vue axios get请求参数为json对象 而非字符串形式

    axios get请求方式 传递给后台的参数都是字符串下形式,无法传递json对象 或数组对象等    post请求方式则可以实现,   但若后台接口要求必须用get方式传递对象给后台,需要装插件,实 ...

随机推荐

  1. MyBatis加强(1)~myBatis对象关系映射(多对一关系、一对多关系)、延迟/懒加载

    一.myBatis对象关系映射(多对一关系.一对多关系) 1.多对一关系: ---例子:多个员工同属于一个部门. (1)myBatis发送 额外SQL: ■ 案例:员工表通过 dept_id 关联 部 ...

  2. ApacheCN 大数据译文集(二) 20211206 更新

    Hadoop3 大数据分析 零.前言 一.Hadoop 简介 二.大数据分析概述 三.MapReduce 大数据处理 四.基于 Python 和 Hadoop 的科学计算和大数据分析 五.基于 R 和 ...

  3. java的装箱和拆箱详解

    ========================================================================================= 在我看来,学习jav ...

  4. js 实现光标控制与字符串查找

    转载请注明来源:https://www.cnblogs.com/hookjc/ 光标定位: <html> <head> <meta http-equiv="co ...

  5. Java 中的锁原理、锁优化、CAS、AQS 详解!(转)

    1.为什么要用锁? 锁-是为了解决并发操作引起的脏读.数据不一致的问题. 2.锁实现的基本原理 2.1.volatile Java编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新, ...

  6. JAVA初学--Servlet详解

    一.什么是servlet? 处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西.理解这个的前提是了解一些http协议的东西,并且知道 ...

  7. js金额转中文大写

    基础参数: var AIW_number = {0:'零', 1:'壹', 2:'贰', 3:'叁', 4:'肆', 5:'伍', 6:'陆', 7:'柒', 8:'捌', 9:'玖'} var AI ...

  8. mysql表查询、多表查询(增强查询的使用)子查询、合并查询,外连接,mysql5种约束,自增长

    一.查询加强 1.在mysql中,日期类型可以直接比较,需要注意格式 2.%:表示0到多个字符, _:表示单个字符 exp:显示第二个字符为大写O的所有员工的姓名和工资 select  name fr ...

  9. C#随机打乱列表List元素顺序

    C#随机打乱列表List项目顺序 以下泛型扩展方法,实现了随机打乱泛型列表List<T>的功能 public static List<t> DisorderItems<t ...

  10. BeanFactory与FactoryBean有什么区别?

    相同点:都是用来创建bean对象的 不同点:使用beanFactory创建对象的时候,必须要遵循严格的生命周期流程,太复杂了,如果想要简单的自定义某个对象的创建,同时创建好的对象想要交给spring来 ...