vue-ajax小封装实例

下面我将为您详细讲解"vue-ajax小封装实例"的完整攻略。

介绍

Vue.js中,我们经常需要通过ajax向服务端请求数据或提交数据,而Vue.js并没有提供自带的ajax函数。因此,我们需要自己针对Vue.js进行封装ajax函数,以便能够在Vue.js中更好地使用ajax请求。

axios与vue-resource选择

目前,市面上流行的封装Ajax的方案主要有两种,一个是axios,一个是vue-resource。而在这里,我们将选择axios进行封装,这是由于axios拥有以下几个优点:

  • 针对流程化的reactive的数据操作,采用Promise形式的回调操作,性能较高
  • 支持浏览器和Node.js,异步操作
  • 功能强大,支持请求拦截、响应拦截、转换请求数据和响应数据、取消请求、自动转换JSON数据,客户端防御XSRF等

注:两种方案在特定的使用场景下会有不同的表现,本篇攻略旨在说明如何使用axios封装Vue.js的ajax请求。

封装axios

安装axios

在使用axios之前,我们需要先安装axios:

npm install axios --save

封装全局的axios方法

在Vue.js项目中,我们在每个页面或每个模块中都需要进行数据请求。为了方便我们的调用,我们将封装一个全局的axios方法,在任何地方都可以快速调用。

// api/api.js文件
import axios from 'axios'
import {Message} from 'element-ui'

// 定义axios默认请求头
axios.defaults.baseURL = 'http://localhost:3000'
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'

// 封装通用请求
export default function(method, url, data = null) {
  return new Promise((resolve, reject) => {
    let config = {
      method: method,
      url: url
    };
    // POST请求时增加data参数
    if (method === 'POST') {
      config.data = data
    }
    axios(config)
      .then(response => {
        resolve(response.data)
      }, err => {
        Message.error(err.response.data.message);
        reject(err)
      })
  })
}

这里我们定义了一个通用的url请求,通过Promise和axios库将请求发起,请求成功则使用resolve将请求数据返回给外部方法,请求失败则使用reject将error返回给外部方法。使用方法如下:

let user = {
  username: 'admin',
  password: '123456'
}
this.$api('post', '/login', user)
  .then(res => {
    console.log(res)
})

其中,$api是指向api.js的一个全局混入,避免了在任何页面中都要使用import引入axios的烦恼。最终的使用效果就是可以在任何地方都使用this.$api()方法来发起请求。

Tips

  • axios.post和axios.get请求方式区别
  • axios.get 请求参数放在URL中,参数通过 ?key1=value1&key2=value2 形式上传
  • axios.post 请求参数放在请求体中,适用于参数量大、安全性高或包含敏感信息的场景

示例一

需求

现在我们需要一个登录页面,该页面需要向后台进行数据请求,以获取用户数据和使用token进行授权。以下是一个示例的后台返回数据:

{
  code: 0,
  data: {
    token: 'xxxxxx',
    userInfo: {
      username: 'admin',
      role: 'admin'
    }
  }
}

实现

我们可以新建一个login.vue的路由页面,在该页面中实现登录业务逻辑。代码如下:

<template>
  <div>
    <h3>登录</h3>
    <el-form ref="form" :model="loginModel" label-width="100px" class="demo-ruleForm">
      <el-form-item label="用户名" prop="username">
        <el-input v-model="loginModel.username"></el-input>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input v-model="loginModel.password"></el-input>
      </el-form-item>
    </el-form>
    <div style="margin-top: 20px;">
      <el-button type="primary" @click="onSubmit">登录</el-button>
    </div>
  </div>
</template>

<script>
export default {
  name: 'login',
  data () {
    return {
      loginModel: {
        username: '',
        password: ''
      }
    }
  },
  methods: {
    // 提交登录信息
    onSubmit () {
      this.$api.post('/login', this.loginModel)
        .then(res => {
          console.log(res)
          this.$store.commit('SET_TOKEN', res.data.token)
          this.$store.commit('SET_USER_INFO', res.data.userInfo)
          this.$router.push({path: '/'})
        })
        .catch(err => {
          console.log(err)
        })
    }
  }
}
</script>

需要特别注意的是,如果你的UI库是Element-UI,则需要添加相应的依赖:

npm i element-ui -S

示例二

需求

现在我们需要实现一个博客列表页面,该页面需要从后台获取信息,以显示最新的文章列表信息。

实现

我们可以在页面刚加载的时候,向后台请求数据,获取文章列表信息并显示在页面中。代码如下:

<template>
  <div>
    <h3>博客列表</h3>
    <el-table :data="blogs">
      <el-table-column prop="title" label="标题"></el-table-column>
      <el-table-column prop="createTime" label="时间"></el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  name: 'blogs',
  data () {
    return {
      blogs: []
    }
  },
  mounted () {
    this.getBlogList()
  },
  methods: {
    // 获取博客列表
    getBlogList () {
      this.$api.get('/blog/lists')
        .then(res => {
          console.log(res)
          this.blogs = res.data
        })
        .catch(err => {
          console.log(err)
        })
    }
  }
}
</script>

以上示例是通过get方法来向后台请求数据,并将数据渲染至页面中展示文章列表信息。

至此,本篇攻略就到了结束,以上就是基于Vue.js的小封装axios实例,希望对大家能帮助到。如果还有任何问题欢迎进行评论讨论。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue-ajax小封装实例 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue3组件更新中的DOM diff算法示例详解

    针对“Vue3组件更新中的DOM diff算法示例详解”,我们可以按照以下步骤进行全面讲解: 1. 什么是DOM diff算法 DOM diff算法是Vue3组件更新的核心算法之一,它的作用是在页面重新渲染时,对所有组件的节点进行比较,找出发生变化的部分,进而实现精准的渲染。这个算法主要发挥的作用是优化了渲染效率,避免了无效重复渲染。 2. Vue3中的DO…

    Vue 2023年5月27日
    00
  • vue 如何添加全局函数或全局变量以及单页面的title设置总结

    根据您的需求,我会详细讲解“Vue 如何添加全局函数或全局变量以及单页面的 title 设置总结”的完整攻略,包含两个示例用于进一步说明。 一、Vue 如何添加全局函数或全局变量 在 Vue 中,我们可以方便地在全局使用自定义函数和变量,这样可以简化业务逻辑,提高开发效率。以下是实现此功能的方法: 1.1 添加全局函数 在 Vue 中添加全局函数的方式是通过…

    Vue 2023年5月28日
    00
  • Vue超详细讲解重试机制示例

    Vue超详细讲解重试机制示例 介绍 在实际开发中,我们经常遇到需要重试某个请求的情况,例如网络不稳定或请求失败等情况。Vue提供了一个非常方便易用的重试机制,以解决这个问题。 在本篇文章中,我们将会探讨如何使用Vue的重试机制,并提供两个示例帮助理解。 Vue的重试机制 Vue的重试机制是通过vue-resource库中的retry方法实现的。retry方法…

    Vue 2023年5月28日
    00
  • vue项目中main.js使用方法详解

    当我们创建一个Vue项目时,main.js是一个非常重要的入口文件,其作用是引入Vue库,创建Vue实例,并将Vue实例挂载到指定的DOM元素上。下面详细讲解main.js使用方法。 1. 引入Vue库和App.vue组件 首先,我们需要在main.js文件中引入所需的依赖:Vue库和App.vue组件。示例代码如下: import Vue from ‘vu…

    Vue 2023年5月27日
    00
  • Vue导出Excel功能的全过程记录

    下面是详细讲解“Vue导出Excel功能的全过程记录”的完整攻略。 1. 背景说明 Excel是一个办公软件中常用的工具,它可以方便地进行表格数据的输入和编辑。在Web应用中,我们可能需要将表格数据以Excel格式导出,这就需要实现一个导出Excel的功能。Vue是一款流行的JavaScript框架,本文将介绍如何在Vue项目中实现导出Excel的功能。 2…

    Vue 2023年5月27日
    00
  • 浅析从面向对象思维理解Vue组件

    非常感谢您对“浅析从面向对象思维理解Vue组件”的关注,以下是完整攻略及两条示例说明。 浅析从面向对象思维理解Vue组件 1. Vue组件 在Vue中,组件被定义为可复用的代码块,包括HTML、CSS和JavaScript。组件可以被嵌套以形成更复杂的应用程序,并且Vue组件的设计思想是基于面向对象的。 2. 面向对象思维 面向对象编程(Object-Ori…

    Vue 2023年5月28日
    00
  • vue实现登录时图形验证码

    下面是Vue实现登录时图形验证码的完整攻略。 1. 简介 在网站的登录界面中,为了增加用户的安全性,通常会使用图形验证码来防止机器恶意登录或者验证码破解等安全问题。Vue作为现代前端框架,可以很方便地实现图形验证码。 2. 实现步骤 2.1 安装v-charts插件 在Vue项目中使用图形验证码需要使用v-charts插件,因此需要先安装v-charts插件…

    Vue 2023年5月29日
    00
  • vue3.0如何在全局挂载对象和方法

    在Vue 3.0中,我们可以使用 createApp 函数来创建一个应用实例,在该实例中可以挂载对象和方法,使其在全局范围内可用。 全局挂载对象 在应用实例中调用 provide 方法,然后将需要全局挂载的对象作为参数传递进去,即可实现全局挂载该对象。 // main.js import { createApp } from ‘vue’ import App…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部