vue 里面使用axios 和封装的示例代码


Posted in Javascript onSeptember 01, 2017

vue官方推荐使用 axios发送请求

首先上需求

1.需要封装全局调用
2.返回一个promise对象
3.错误全局统一处理
4.除了登录界面token带入头部
5.登录时候把用户信息自动存到vuex里面

首先上封装代码

/**
 * User: sheyude
 * Date: 2017/8/23 0023
 * Time: 下午 13:15
 *
 */

import axios from 'axios';
// 导入配置文件 配置文件就导入的请求的前缀地址
import {defaults} from '@/config/'

import storage from './storage'


// 这是一个饿了么的弹框
import { Message } from 'element-ui';
//路由配置
import router from '@/router'

/**
 * 封装的全局ajax请求
 */

class Axios{
  constructor (){
    this.init();
  };

  /**
   * 初始化
   */
  init(){
    axios.defaults.baseURL = defaults.baseURL;
  };
  _setUserInfo(data){
    // 把请求的数据存入vuex
    store.commit('setUserInfo',data);
  }

  /**
   * 判断是否是登录
   * @param url
   * @returns {boolean}
   * @private
   */
  _isLogin(url){
    
    if(url != '/app/login'){
      axios.defaults.headers = {'x-token': store.state.user.user.token.token};
      return false;
    }else{
      return true;
    }
  }

  /**
   * 判断是否返回数据
   * @param data 接收到的数据
   * @returns {boolean}
   * @private
   */
  _isStatus(data){
    if(data.code == 100){
      router.push('/login');
      Message.error(data.message || '请重新登录!');

      return false
    }else{
      return true
    }

  }

  /**
   * 全局错误处理
   * @param data 传入错误的数据
   * @private
   */
  _error(data){
    console.log(data)
    Message.error('网络错误!');
  }

  /**
   * GET 请求 {es6解构赋值}
   * @param type 包含url信息
   * @param data 需要发送的参数
   * @returns {Promise}
   * @constructor
   */
  HttpGet({url},data) {
    console.log(data)
    // 创建一个promise对象
    this._isLogin(url)
    this.promise = new Promise((resolve, reject)=> {
      axios.get(url,{params:data})
        .then((data) => {
        // console.log(data)
          if(this._isStatus(data.data)){
            resolve(data.data);
          }
        })
        .catch((data) =>{
          this._error(data);
        })
    })
    return this.promise;
  };

  /**
   * POST 请求
   * @param type Object 包含url信息
   * @param data Object 需要发送的参数
   * @param urlData Object 需要拼接到地址栏的参数
   * @returns {Promise}
   * @constructor
   */
  HttpPost({url},Data,urlData){

    // 判断是否加头部
    this._isLogin(url);
    // 创建一个promise对象
    this.promise = new Promise((resolve, reject)=> {
      for(const item in urlData){
        url += '/' + urlData[item];
      };
      axios.post(url,Data)
        .then((data) => {

          // 是否请求成功
          if(this._isStatus(data.data)){
            // 是否需要存数据
            if(this._isLogin(url)){
              this._setUserInfo(data.data)
            };
            resolve(data.data)
          };
        })
        .catch((data) =>{
          this._error(data);
        })
    })
    return this.promise;
  };
};
export default new Axios();

调用方式

this.$axios.HttpPost(this.audit.auditGet,this.params)
 .then((data) => {
    this.pageData = data.data
 })

接收2个参数

1 url 地址
2 需要传递的参数

我目前全局注册了 使用需要挂载到vue原型

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
吐槽一下我所了解的Node.js
Oct 08 Javascript
JavaScript编程中布尔对象的基本使用
Oct 25 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
May 17 Javascript
使用jQuery操作DOM的方法小结
Feb 27 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
Jun 22 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
May 21 jQuery
vue 点击按钮增加一行的方法
Sep 07 Javascript
彻底揭秘keep-alive原理(小结)
May 05 Javascript
解决layui 表单元素radio不显示渲染的问题
Sep 04 Javascript
vue在路由中验证token是否存在的简单实现
Nov 11 Javascript
ionic2懒加载配置详解
Sep 01 #Javascript
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 #Javascript
Vue的Class与Style绑定的方法
Sep 01 #Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
Sep 01 #Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
Sep 01 #Javascript
Angularjs实现上传图片预览功能
Sep 01 #Javascript
JavaScript中使用参数个数实现重载功能
Sep 01 #Javascript
You might like
Syphon 秘笈
2021/03/03 冲泡冲煮
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
php文件缓存方法总结
2016/03/16 PHP
javascript demo 基本技巧
2009/12/18 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
python验证码识别的示例代码
2017/09/21 Python
Django权限机制实现代码详解
2018/02/05 Python
python实现图片压缩代码实例
2019/08/12 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
2014年四风问题自我剖析材料
2014/09/15 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书
Oracle 死锁的检测查询及处理
2021/09/25 Oracle