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 实现input输入什么div图层显示什么
Jun 15 Javascript
JavaScript实现16进制颜色值转RGB的方法
Feb 09 Javascript
javascript实现给定半径求出圆的面积
Jun 26 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
May 10 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
Jun 06 Javascript
纯JS前端实现分页代码
Jun 21 Javascript
纯js仿淘宝京东商品放大镜功能
Mar 02 Javascript
JavaScript实现的DOM绘制柱状图效果示例
Aug 08 Javascript
详解iview的checkbox多选框全选时校验问题
Jun 10 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 Javascript
Vue是怎么渲染template内的标签内容的
Jun 05 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
Aug 13 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中遍历二维数组的几种方法详解
2013/06/08 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
Vue.js实现输入框绑定的实例代码
2017/08/24 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
vue 实现锚点功能操作
2020/08/10 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
python之随机数函数的实现示例
2020/12/30 Python
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
酒店端午节促销方案
2014/02/18 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
店长岗位职责
2015/02/11 职场文书
个人培训总结
2015/03/05 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle