我这里使用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. Python与Javascript相互调用超详细讲解(四)使用PyNode进行Python与Node.js相互调用项(cai)目(keng)实(jing)践(yan)

    目录 前提 安装 使用 const pynode = require('@fridgerator/pynode')的时候动态链接错误 ImportError: math.cpython-39-x86_ ...

  2. linux 常用命令。

    /* Linux常用命令? 1 查看 ls             展示当前目录下的可见文件   ls -a         展示当前目录下所有的文件(包括隐藏的文件)   ls -l(ll)     ...

  3. Android 关于Intent的一些简略总结

    感谢大佬:https://www.jianshu.com/p/19147a69e970 Intent 常用构造方法: | 方法 | 描述 | |Intent() | 构造一个空 Intent | | ...

  4. aidl介绍

    (1)远程服务 运行在其他应用里面的服务     (2)本地服务 运行在自己应用里面的服务    (3)进行进程间通信  IPC   (4)aidl Android interface Definat ...

  5. iOS 七大手势之轻拍,长按,旋转手势识别器方法-赵小波

    一.监听触摸事件的做法 如果想监听一个view上面的触摸事件,之前的做法通常是:先自定义一个view,然后再实现view的touches方法,在方法内部实现具体处理代码 通过touches方法监听vi ...

  6. 一加6刷入kali nethunter

    Installing Kali NetHunter On the OnePlus 6 准备工具: adb: https://jingyan.baidu.com/article/22fe7cedf67e ...

  7. Failed to connect to raw.githubusercontent.com 443 解决方案

    wget 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid ...

  8. PostgreSQL删除数据库失败处理

    PostgreSQL Drop DATABASE删除数据库失败,需要结束掉占用的连接 登录PostgreSQL后,执行: SELECT pg_terminate_backend(pg_stat_act ...

  9. 赠送4本《 PHP 程序员面试笔试宝典》

    < PHP 程序员面试笔试宝典>历时一年,由机械工业出版社出版,在 2018 年 11 月问世.全书共八个章节,涉及 面试笔试经验技巧.PHP 基础知识.PHP 进阶知识,PHP 面向对象 ...

  10. 关于git和SVN的介绍和区别

    主要对git,svn进行一个简单的介绍. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜 ...