vue-ajax小封装实例

yizhihongxing

下面我将为您详细讲解"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日

相关文章

  • vue+koa2实现session、token登陆状态验证的示例

    一、概述 在web应用程序中,访问控制是一个非常重要的问题。session和token都是常见的存储用户身份验证状态的解决方案。在vue和koa2框架的帮助下,可以轻松实现这些解决方案,并提高应用程序的安全性。 本文将详细介绍如何使用vue+koa2实现session、token登陆状态验证的示例。 二、实现session存储用户身份验证状态 session…

    Vue 2023年5月28日
    00
  • vue+element-ui+axios多文件上传的实现并显示整体进度

    下面我会详细讲解“vue+element-ui+axios多文件上传的实现并显示整体进度”的完整攻略,具体分为以下几个步骤: 第一步:安装所需依赖 在使用这种方式进行文件上传时,我们需要用到vue、element-ui和axios这几个主要的依赖。因此,首先需要在项目中安装它们: npm install vue element-ui axios –save…

    Vue 2023年5月28日
    00
  • uni-popup手写菜鸟上门取件时间选择器

    Uni-popup是一个强大的弹出层组件,可以用于实现各种弹出窗口,包括选择器。本攻略将详细讲解如何使用uni-popup手写菜鸟上门取件时间选择器。 第一步:引入uni-popup组件 在页面中引入uni-popup组件,需要在<script>标签中添加如下代码: import uniPopup from ‘@/components/uni-p…

    Vue 2023年5月28日
    00
  • Vue.js中轻松解决v-for执行出错的三个方案

    下面是对“Vue.js中轻松解决v-for执行出错的三个方案”的完整攻略。 问题背景 在使用 Vue.js 进行开发过程中,我们经常会使用 v-for 来遍历一个数据列表,并生成对应的视图。但是,在某些情况下,我们可能会遇到 v-for 执行出错的问题,这时我们需要使用一些方法来解决这个问题。 问题示例 以下是一个常见的使用 v-for 遍历数组的示例: &…

    Vue 2023年5月28日
    00
  • 详解Vue webapp项目通过HBulider打包原生APP

    下面将详细讲解Vue webapp项目通过HBuilder打包成原生APP的完整攻略。 什么是HBuilder HBuilder是一款功能强大的HTML5集成开发环境,支持多种前端框架,例如Vue、React等。通过HBuilder,我们可以方便地将前端项目打包成可在手机上安装的原生APP。 步骤一:HBuilder项目配置 首先,我们需要在HBuilder…

    Vue 2023年5月28日
    00
  • vue.js中Vue-router 2.0基础实践教程

    下面是“vue.js中Vue-router 2.0基础实践教程”的完整攻略: 什么是Vue-router? Vue-router是Vue.js官方的路由管理器。它与Vue.js深度集成,可以非常方便地实现单页应用中的路由跳转、参数传递、路由拦截等功能。Vue-router的核心概念包括路由、参数、钩子、子路由等。 安装和使用Vue-router 安装Vue-…

    Vue 2023年5月28日
    00
  • 基于Vue单文件组件详解

    基于Vue单文件组件详解 什么是单文件组件 单文件组件是Vue框架中常用的组件化开发方式。它将组件的HTML模板、JavaScript逻辑和CSS样式整合到同一个文件中,更加方便管理和开发。 单文件组件的优点 结构清晰:单文件组件将组件的”三大件“整合到一起,代码结构更加清晰; 复用性高:单文件组件可以被其他组件复用,提高代码的复用性; 可维护性强:单文件组…

    Vue 2023年5月28日
    00
  • 详解vue.js根据不同环境(正式、测试)打包到不同目录

    要根据不同环境(正式、测试)打包到不同目录,我们可以使用webpack进行配置。 首先,在项目根目录下创建一个config文件夹,里面创建三个文件:dev.env.js、prod.env.js、index.js。 dev.env.js文件内容如下: module.exports = { NODE_ENV: ‘"development"’,…

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