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 相关文章推荐
IE6/7/8/9不支持exec的简写方式
May 25 Javascript
修改好的jquery滚动字幕效果实现代码
Jun 22 Javascript
JS基于面向对象实现的放烟花效果
May 07 Javascript
Centos7 中安装 Node.js v4.4.4
Nov 03 Javascript
Vue中保存用户登录状态实例代码
Jun 07 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
Jan 08 Javascript
vue 虚拟dom的patch源码分析
Mar 01 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 Javascript
小程序scroll-view组件实现滚动的示例代码
Sep 20 Javascript
如何将百度地图包装成Vue的组件的方法步骤
Feb 12 Javascript
vue 虚拟DOM的原理
Oct 03 Javascript
解决vue打包报错Unexpected token: punc的问题
Oct 24 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打印输出棋盘的实现方法
2014/12/23 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
改版了网上的一个js操作userdata
2007/04/27 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
Google 地图API Map()构造器详解
2016/08/06 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
vue的mixins属性详解
2018/03/14 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
环境工程大学生自荐信
2013/10/21 职场文书
在求职信中如何凸显个人优势
2013/10/30 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
社会工作专业求职信
2014/07/15 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
流动人口婚育证明
2014/10/19 职场文书
模范教师事迹材料
2014/12/16 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
工程催款通知书
2015/04/17 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
mysql left join快速转inner join的过程
2021/06/30 MySQL
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript