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 相关文章推荐
javascript 一个自定义长度的文本自动换行的函数
Aug 19 Javascript
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
js+CSS实现弹出居中背景半透明div层的方法
Feb 26 Javascript
基于jQuery实现多层次的手风琴效果附源码
Sep 21 Javascript
jQuery页面弹出框实现文件上传
Feb 09 Javascript
数组Array的一些方法(总结)
Feb 17 Javascript
javascript闭包功能与用法实例分析
Apr 06 Javascript
JQuery Ajax 异步操作之动态添加节点功能
May 24 jQuery
jQuery实现的鼠标响应缓冲动画效果示例
Feb 13 jQuery
vue 过滤器filter实例详解
Mar 14 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
Sep 03 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
Apr 10 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
PR值查询 | PageRank 查询
2006/12/20 PHP
抓取YAHOO股票报价的类
2009/05/15 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
php适配器模式简单应用示例
2019/10/23 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
jquery ajax abort()的使用方法
2010/10/28 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
Python中的列表生成式与生成器学习教程
2016/03/13 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
Python argparse模块使用方法解析
2020/02/20 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
几个常见的消息中间件(MOM)
2014/01/08 面试题
传播学毕业生求职信
2013/10/11 职场文书
区域总监的岗位职责
2013/11/21 职场文书
新员工欢迎词
2014/01/12 职场文书
汽车维修求职信
2014/06/15 职场文书
科技工作者先进事迹
2014/08/16 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
违反工作规定检讨书范文
2014/12/14 职场文书
党员转正意见怎么写
2015/06/03 职场文书