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 相关文章推荐
JS获取图片实际宽高及根据图片大小进行自适应
Aug 11 Javascript
JavaScript实现信用卡校验方法
Apr 07 Javascript
把Node.js程序加入服务实现随机启动
Jun 25 Javascript
JS实现简单的图书馆享元模式实例
Jun 30 Javascript
分享经典的JavaScript开发技巧
Nov 21 Javascript
jquery实现点击页面回到顶部
Nov 23 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
Feb 15 Javascript
js时间查询插件使用详解
Apr 07 Javascript
vue 属性拦截实现双向绑定的实例代码
Oct 24 Javascript
微信小程序 WXML节点信息查询详解
Jul 29 Javascript
vue设置默认首页的操作
Aug 12 Javascript
react antd表格中渲染一张或多张图片的实例
Oct 28 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连接Oracle数据库
2006/10/09 PHP
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
Laravel框架表单验证详解
2014/09/04 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
微信小程序实现表单校验功能
2020/03/30 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
vue+element导航栏高亮显示的解决方式
2019/11/12 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
跟老齐学Python之编写类之二方法
2014/10/11 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
集团公司总经理岗位职责
2013/12/20 职场文书
公司合作意向书
2014/04/01 职场文书
2014年客房部工作总结
2014/11/22 职场文书
后进生评语大全
2015/01/04 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
电频谱管理的原则是什么
2022/02/18 无线电