vue2.0学习之axios的封装与vuex介绍(2)

action  异步修改  state  的值。说白了,action也是一个存放修改state方法的仓库,但是 这些方法都是要调axios请求的(所以叫异步),请求完事了,再调 mutations 去同步修改state的值。所谓的异步都是我们自己写的。当然你不这么写也行,只是设计者的初衷是想让让开发者清楚异步修改的概念,虽然暂时没有解决根本问题。

这里涉及到axios请求,这个下边解释,暂时先清楚 action的概念。

4. vuex和组件通信

上述介绍了 vuex的几个部分的作用,那现在就是如何在组件中去使用 vuex

首先,在main.js中,你需要将store对象引入到整个应用中

new Vue({ el: '#app', router, store, render: h => h(App) })

然后在组件中使用

// 直接使用 <alert v-if="this.$store.state.alertFlag.state"></alert> // 同步的 commit this.$store.commit('SET_ALERT_DETAIL', {title: '提示', content: '您确定要还款吗?'} // 异步的 dispatch this.$store.dispatch('actionTest').then(() => {})

简单介绍一下:

  this.$store.state.  我们通过$store对象 ,直接使用state中的属性

  this.$store.commit('', {})   通过 commit 方法调  mutations-types 中的方法(其实就是mutations的方法),这步是同步的,而且数据会自动监听变化就行渲染

  this.$store.dispatch('actionTest').then(() => {})  通过 dispatch 的方法调 action 的方法,异步修改 state

  注:vue中的这个  this 注意他的指向,建议不确定时,先将this赋给变量保存起来,有时经常会和window对象混淆。

  以上就是vuex最基础的用法,也是最常用的方法。其他的像 getters 、如何组件中引入vuex等等,这里就不细说了,大家可以根据自身需求自行看文档补充。

 五、 封装axios

在一个完整的项目中,我们的和服务端的交互会很频繁,一个项目会有很多请求,冗余代码很多。所以将请求封装,统一管理还是很有必要的。我们现在做一个简单的封装。

1. 先看一下结构

vue2.0学习之axios的封装与vuex介绍

  

2. 看一下具体代码

axios.js 文件

import axios from 'axios' // 创建axios实例 application/x-www-data-urlencoded application/json const service = axios.create({ baseURL: 'http://www.niepengfei.cn/PHPFile/ybtDemo/', timeout: 15000, headers: {'Content-Type': 'application/json'} }) service.interceptors.response.use( function(response) { // 请求正常则返回,这里返回了所有的请求头和请求体信息 return Promise.resolve(response) }, function(error) { // 请求错误则向store commit这个状态变化 const httpError = { alertFlag: true, errorStatus: error.response.status, msgg: error.response.statusText } this.$store.commit('SET_ALERT_FLAG', {state: false, type: 'ok'}) console.log(httpError) return Promise.reject(error) } ) export default service

index.js 文件

import request from './axios.js' export function getTest(axiosData) { var data = { url: '', method: 'post', data: '' } // 合成请求对象 Object.assign(data, axiosData) return request(data) }

这里我们仅仅做了post 请求的封装。先对axios做上默认请求的数据,封装成函数,有传参就合并修改参数数据,请求结束之后,根据response、error,分成成功和失败两个函数,并将整个promise对象返回。对于请求的拦截这里没做。而且对网络请求的错误码也是大家根据项目具体提示的。我这里也不做详细的说明了

3. 组件中使用

import { getTest } from '../../server/index.js' getTest({ url: 'login.php', data: JSON.stringify({ 'phone': thiss.phone, 'phoneCode': thiss.phoneCode }) }) .then(response => { console.log(response.data) if (response.data.code === '0000') { ... } })

将封装的axios引入组件,然后直接调用即可

六、总结

以上就是 vuex+axios封装的实例,时间原因,这里进提供思路和简单的实现方法,至于具体项目具体分析,axios要怎么封装,vuex还需做什么监听,那就是大家为自己项目定制的东西了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/c5edd25c8cc60fa12c709b3347a9d636.html