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 相关文章推荐
Dom加载让图片加载完再执行的脚本代码
May 15 Javascript
jquery实现当滑动到一定位置时固定效果
Jun 17 Javascript
JS实现的4种数字千位符格式化方法分享
Mar 02 Javascript
JavaScript实现简单的tab选项卡切换
Jan 05 Javascript
关于input全选反选恶心的异常情况
Jul 24 Javascript
归纳下js面向对象的几种常见写法总结
Aug 24 Javascript
详解Js模板引擎(TrimPath)
Nov 22 Javascript
bootstrap快速制作后台界面
Dec 05 Javascript
seajs中模块依赖的加载处理实例分析
Oct 10 Javascript
在微信小程序中渲染HTML内容的方法示例
Sep 28 Javascript
基于js实现抽红包并分配代码实例
Sep 19 Javascript
vue组件中传值EventBus的使用及注意事项说明
Nov 16 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php中$this->含义分析
2009/11/29 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
nodejs win7下安装方法
2012/05/24 NodeJs
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
python中的格式化输出用法总结
2016/07/28 Python
Python中的探索性数据分析(功能式)
2017/12/22 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
selenium+python环境配置教程详解
2019/05/28 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
手写一个python迭代器过程详解
2019/08/27 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
汽修专业学生自我鉴定
2013/11/16 职场文书
简单的辞职信范文
2014/01/18 职场文书
人事助理自荐信
2014/02/02 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
地震捐款简报
2015/07/21 职场文书
物资采购管理制度
2015/08/06 职场文书
教师理论学习心得体会
2016/01/21 职场文书