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 相关文章推荐
Extjs TriggerField在弹出窗口显示不出问题的解决方法
Jan 08 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
May 17 Javascript
php和js对数据库图片进行等比缩放示例
Apr 28 Javascript
如何判断微信内置浏览器(通过User Agent实现)
Sep 01 Javascript
JavaScript数组的一些奇葩行为
Jan 25 Javascript
jquery中键盘事件小结
Feb 24 Javascript
jquery  实现轮播图详解及实例代码
Oct 12 Javascript
vue2组件之select2调用的示例代码
Oct 12 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
微信小程序之数据绑定原理解析
Aug 14 Javascript
js中!和!!的区别与用法
May 09 Javascript
jQuery实现穿梭框效果
Jan 19 jQuery
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基础知识:类与对象(5) static
2006/12/13 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
python操作MySQL数据库具体方法
2013/10/28 Python
Python转换HTML到Text纯文本的方法
2015/01/15 Python
Python操作Excel之xlsx文件
2017/03/24 Python
python数据处理实战(必看篇)
2017/06/11 Python
python 字符串只保留汉字的方法
2018/11/16 Python
Python3多线程基础知识点
2019/02/19 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
酒店执行总经理岗位职责
2013/12/15 职场文书
爱我中华教学反思
2014/04/28 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
研究生简历自我评
2015/03/11 职场文书
董事长新年致辞
2015/07/29 职场文书
Python集合set()使用的方法详解
2022/03/18 Python
基于Redission的分布式锁实战
2022/08/14 Redis