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 相关文章推荐
js中的时间转换—毫秒转换成日期时间的示例代码
Jan 26 Javascript
深入浅析javascript立即执行函数
Oct 23 Javascript
jQuery Mobile页面返回不需要重新get
Apr 26 Javascript
JS传值出现中文参数乱码的解决方法
Jun 30 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
Sep 06 Javascript
BootstrapValidator超详细教程(推荐)
Dec 07 Javascript
node.js实现回调的方法示例
Mar 01 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
Jul 10 Javascript
JS实现的简单折叠展开动画效果示例
Apr 28 Javascript
vue项目中实现缓存的最佳方案详解
Jul 11 Javascript
Node如何后台数据库使用增删改查功能
Nov 21 Javascript
es6 for循环中let和var区别详解
Jan 12 Javascript
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
处理php自动反斜杠的函数代码
2010/01/05 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
给Function做的OOP扩展
2009/05/07 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
JS返回顶部实例代码
2020/08/09 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
轻松学习JavaScript函数中的 Rest 参数
2019/05/30 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
Python中如何获取类属性的列表
2016/12/26 Python
python爬取网页转换为PDF文件
2018/06/07 Python
Python字符串、整数、和浮点型数相互转换实例
2018/08/04 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
django最快程序开发流程详解
2019/07/19 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
美国最大点评网站:Yelp
2018/02/14 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
酒店管理专业自荐信
2014/05/23 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
2014年团支部工作总结
2014/11/17 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
2016关于军训的心得体会
2016/01/11 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python