我这里使用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. 运用Spring Aop,一个注解实现日志记录

    运用Spring Aop,一个注解实现日志记录 1. 介绍 我们都知道Spring框架的两大特性分别是 IOC (控制反转)和 AOP (面向切面),这个是每一个Spring学习视频里面一开始都会提到 ...

  2. Java 后台线程介绍

    一  是啥? package com.aaa.threaddemo; /* * 一 Java后台线程? * 守护线程--也称"服务线程",他是后台线程, * 它有一个特性,即为用户 ...

  3. Linux 配置mysql 免安装版。

    二.Linux配置 mysql ? 1.linux配置mysql(要求全部使用免安装版) 5.1.从官网下载mysql5.tar.gz 5.2.使用xftp把mysql的压缩包上传到服务器上 5.3. ...

  4. Android 12(S) 图形显示系统 - createSurface的流程(五)

    题外话 刚刚开始着笔写作这篇文章时,正好看电视在采访一位92岁的考古学家,在他的日记中有这样一句话,写在这里与君共勉"不要等待幸运的降临,要去努力的掌握知识".如此朴实的一句话,此 ...

  5. 再见丑陋的 SwaggerUI,这款开源的API文档生成神器界面更炫酷,逼格更高!

    一般在使用 Spring Boot 开发前后端分离项目的时候,都会用到 Swagger.Swagger 是一个规范和完整的框架,用于生成.描述.调试和可视化 RESTful 风格的 Web API 服 ...

  6. js演示面向对象

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Struts2跟SpringMVC的区别

    1. 拦截机制不同 Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter ...

  8. Linux专项之Apache

    day01:apache服务框架 前期准备 1.虚拟机上网 实验一:展示默认页面 1.安装软件(httpd) yum search httpd yum install -y httpd 2.关闭防火墙 ...

  9. Solution -「CEOI 2006」「洛谷 P5974」ANTENNA

    \(\mathcal{Description}\)   Link.   给定平面上 \(n\) 个点,求最小的能覆盖其中至少 \(m\) 个点的圆半径及一个可能的圆心.   \(n\le500\),坐 ...

  10. Solution -「ABC 219H」Candles

    \(\mathcal{Description}\)   Link.   有 \(n\) 支蜡烛,第 \(i\) 支的坐标为 \(x_i\),初始长度为 \(a_i\),每单位时间燃烧变短 \(1\) ...