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 相关文章推荐
jQuery EasyUI API 中文文档 - ComboBox组合框
Oct 07 Javascript
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
jquery js 获取时间差、时间格式具体代码
Jun 05 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
Apr 14 Javascript
使用jquery提交form表单并自定义action的实现代码
May 25 Javascript
微信小程序 location API接口详解及实例代码
Oct 12 Javascript
bootstrap监听滚动实现头部跟随滚动
Nov 08 Javascript
简单实现vue中的依赖收集与响应的方法
Feb 18 Javascript
vue router动态路由设置参数可选问题
Aug 21 Javascript
JS实现动态无缝轮播
Jan 11 Javascript
package.json各个属性说明详解
Mar 11 Javascript
字节飞书面试promise.all实现示例
Jun 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
最常用的8款PHP调试工具
2014/07/06 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
Python常用正则表达式符号浅析
2014/08/13 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Python随机数random模块使用指南
2016/09/09 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
公共场所标语
2014/06/30 职场文书
委托书的写法
2014/09/16 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
交通事故案件代理词
2015/05/23 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
高二化学教学反思
2016/02/22 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
Python实现数据的序列化操作详解
2022/07/07 Python