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支持firefox,ie7页面布局拖拽效果代码
Dec 20 Javascript
javascript 面向对象继承
Nov 26 Javascript
JavaScript 一道字符串分解的题目
Aug 03 Javascript
javascript将浮点数转换成整数的三个方法
Jun 23 Javascript
jQuery实现简单的图片查看器
Sep 11 Javascript
require、backbone等重构手机图片查看器
Nov 17 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
Jul 06 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
Sep 18 Javascript
vue实现简单loading进度条
Jun 06 Javascript
微信小程序实现弹出菜单动画
Jun 21 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
Jan 16 Javascript
Vue页面跳转传递参数及接收方式
Sep 09 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 Undefined index的问题
2009/06/01 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
ThinkPHP实现递归无级分类――代码少
2015/07/29 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
vue中监听返回键问题
2019/08/28 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
JS实现简易计算器
2020/02/14 Javascript
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
Python实现进程同步和通信的方法
2018/01/02 Python
python把转列表为集合的方法
2019/06/28 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
python实现手势识别的示例(入门)
2020/04/15 Python
Python如何实现机器人聊天
2020/09/10 Python
财务会计专业求职信范文
2013/12/31 职场文书
班主任工作年限证明
2014/01/12 职场文书
《蓝色的树叶》教学反思
2014/02/24 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
公司承诺函范文
2015/01/21 职场文书
求职自我评价范文
2015/03/09 职场文书
商场收银员岗位职责
2015/04/07 职场文书
行政处罚告知书
2015/07/01 职场文书
nginx配置限速限流基于内置模块
2022/05/02 Servers