Vue.js实战之使用Vuex + axios发送请求详解


Posted in Javascript onApril 04, 2017

前言

Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource

目前主流的 Vue 项目,都选择 axios 来完成 ajax 请求,而大型项目都会使用 Vuex 来管理数据,所以这篇博客将结合两者来发送请求

Vuex 的安装将不再赘述,可以参考之前的Vue.js实战之Vuex的入门教程

使用 cnpm 安装 axios

cnpm install axios -S

安装其他插件的时候,可以直接在 main.js 中引入并 Vue.use(),但是 axios 并不能 use,只能每个需要发送请求的组件中即时引入

为了解决这个问题,有两种开发思路,一是在引入 axios 之后,修改原型链,二是结合 Vuex,封装一个 aciton。具体的实施请往下看~

方案一:改写原型链

首先在 main.js 中引入 axios

import axios from 'axios'

这时候如果在其它的组件中,是无法使用 axios 命令的。但如果将 axios 改写为 Vue 的原型属性,就能解决这个问题

Vue.prototype.$ajax = axios

在 main.js 中添加了这两行代码之后,就能直接在组件的 methods 中使用 $ajax 命令

methods: {
 submitForm () {
 this.$ajax({
  method: 'post',
  url: '/user',
  data: {
  name: 'wise',
  info: 'wrong'
  }
 })
}

方案二:在 Vuex 中封装

之前的文章中用到过 Vuex 的 mutations,从结果上看,mutations 类似于事件,用于提交 Vuex 中的状态 state

action 和 mutations 也很类似,主要的区别在于,action 可以包含异步操作,而且可以通过 action 来提交 mutations

另外还有一个重要的区别:

mutations 有一个固有参数 state,接收的是 Vuex 中的 state 对象

action 也有一个固有参数 context,但是 context 是 state 的父级,包含  state、getters

Vuex 的仓库是 store.js,将 axios 引入,并在 action 添加新的方法

// store.js
import Vue from 'Vue'
import Vuex from 'vuex'

// 引入 axios
import axios from 'axios'

Vue.use(Vuex)

const store = new Vuex.Store({
 // 定义状态
 state: {
 test01: {
  name: 'Wise Wrong'
 },
 test02: {
  tell: '12312345678'
 }
 },
 actions: {
 // 封装一个 ajax 方法
 saveForm (context) {
  axios({
  method: 'post',
  url: '/user',
  data: context.state.test02
  })
 }
 }
})

export default store

注意:即使已经在 main.js 中引入了 axios,并改写了原型链,也无法在 store.js 中直接使用 $ajax 命令

换言之,这两种方案是相互独立的

在组件中发送请求的时候,需要使用 this.$store.dispatch 来分发

methods: {
 submitForm () {
 this.$store.dispatch('saveForm')
 }
}

submitForm 是绑定在组件上的一个方法,将触发 saveForm,从而通过 axios 向服务器发送请求

附:配置 axios

上面封装的方法中,使用了 axios 的三个配置项,实际上只有 url 是必须的。

为了方便,axios 还为每种方法起了别名,比如上面的 saveForm 方法等价于:

axios.post('/user', context.state.test02)

完整的请求还应当包括 .then 和 .catch

.then(function(res){
 console.log(res)
})
.catch(function(err){
 console.log(err)
})

当请求成功时,会执行 .then,否则执行 .catch

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
网页里控制图片大小的相关代码
Jun 13 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
Apr 02 Javascript
javascript计时器事件使用详解
Jan 07 Javascript
JavaScript 控制字体大小设置的方法
Nov 23 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
Mar 01 Javascript
Angular1.x复杂指令实例详解
Mar 01 Javascript
js中字符型和数值型数字的互相转化方法(必看)
Apr 25 Javascript
浅谈Node.js 中间件模式
Jun 12 Javascript
TypeScript类型声明书写详解
Aug 28 Javascript
基于vue-cli3和element实现登陆页面
Nov 13 Javascript
node.JS事件机制与events事件模块的使用方法详解
Feb 06 Javascript
vue中音频wavesurfer.js的使用方法
Feb 20 Vue.js
Vue.js实战之组件的进阶
Apr 04 #Javascript
关于axios返回空对象的问题解决
Apr 04 #Javascript
jQuery自定义图片上传插件实例代码
Apr 04 #jQuery
jQuery使用unlock.js插件实现滑动解锁
Apr 04 #jQuery
利用jquery正则表达式在页面验证url网址输入是否正确
Apr 04 #jQuery
JavaScript实现实时更新系统时间的实例代码
Apr 04 #Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
Apr 04 #jQuery
You might like
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
为你总结一些php系统类函数
2015/10/21 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
laravel 数据验证规则详解
2019/10/23 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
Python中几种操作字符串的方法的介绍
2015/04/09 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
Django Form常用功能及代码示例
2020/10/13 Python
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
单位领导证婚词
2014/01/14 职场文书
工作过失检讨书
2014/02/23 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
聘任合同书
2015/09/21 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android