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各种复制代码收集
Sep 20 Javascript
JQuery中基础过滤选择器用法实例分析
May 18 Javascript
js自定义select下拉框美化特效
May 12 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
Aug 03 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
Sep 13 Javascript
ES6新特性之函数的扩展实例详解
Apr 01 Javascript
详解node中创建服务进程
May 09 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
Mar 08 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
Apr 10 Javascript
vue 中filter的多种用法
Apr 26 Javascript
vue中子组件的methods中获取到props中的值方法
Aug 27 Javascript
Vue 中使用 typescript的方法详解
Feb 17 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
Yii2框架中一些折磨人的坑
2019/12/15 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
python列表切片和嵌套列表取值操作详解
2020/02/27 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
《大作家的小老师》教学反思
2014/04/16 职场文书
课外活动总结范文
2014/07/09 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
内勤岗位职责范本
2015/04/13 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
2015年科普工作总结
2015/07/23 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书