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 相关文章推荐
JavaScript网页制作特殊效果用随机数
May 22 Javascript
JQuery优缺点分析说明
Apr 10 Javascript
Mac地址验证的javascript代码
Nov 09 Javascript
JQuery实现鼠标移动到图片上显示边框效果
Jan 09 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
Jan 13 Javascript
javascript常用的设计模式
Feb 09 Javascript
AngularJS 表单验证手机号的实例(非必填)
Nov 12 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
Jan 12 Javascript
JavaScript原型链与继承操作实例总结
Aug 24 Javascript
js操作table中tr的顺序实现上移下移一行的效果
Nov 22 Javascript
javascript 易错知识点实例小结
Apr 25 Javascript
JS 4个超级实用的小技巧 提升开发效率
Oct 05 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
PHP与SQL注入攻击[三]
2007/04/17 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
19个Android常用工具类汇总
2014/12/30 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
Django中信号signals的简单使用方法
2019/07/04 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
python使用Geany编辑器配置方法
2020/02/21 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
党支部公开承诺书
2014/03/28 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis