vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据


Posted in Javascript onApril 22, 2017

在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今天这边博文用来记录这一整个的过程,后台api接口是使用webpack-server模拟的接口,这个前面的文章中有提到,需要的可以去翻阅。

整个的流程是在组件的created中提交dispatch,然后通过action调用一个封装好的axios然后再触发mutation来提交状态改变state中的数据,然后在组件的计算属性中获取state的数据并渲染在页面上

首先新需要在项目中安装vuex:

运行命令

npm install vuex --save-dev

在项目的入口is文件main.js中

import store from './store/index'

并将store挂载到vue上

new Vue({
 el: '#app',
 router,
 store,
 template: '<App/>',
 render: (createElement) => createElement(App)
})

然后看下整个store的目录结构,modules文件夹用来将不同功能也面的状态分成模块,index.js文件夹是store的入口文件,types文件夹是定义常量mutation的文件夹

整个vuex的目录结构如下:

vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据

这里我新建了文件夹fetch用来编写所有的axios处理和axios封装

在fetch文件夹下新建api.js文件:

import axios from 'axios'

export function fetch(url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, params)
      .then(response => {
         alert('Api--ok');
        resolve(response.data);
      })
      .catch((error) => {
       console.log(error)
        reject(error)
      })
  })
}

export default {
 // 获取我的页面的后台数据
 mineBaseMsgApi() {
   alert('进入api.js')
  return fetch('/api/getBoardList');
 }
}

在store的入口文件index.js中:

import Vue from 'vue'
import Vuex from 'vuex'

import mine from './modules/mine';

Vue.use(Vuex);

export default new Vuex.Store({
 modules: {
  mine
 }
});

在你需要请求后台数据并想使用vuex的组件中的created分发第一个dispatch:

created() {
  this.$store.dispatch('getMineBaseApi');
 }

然后在store/modules下的对应模块js文件中,这里我使用的mine.js文件中编写state、action和mutation

import api from './../../fetch/api';
import * as types from './../types.js';

const state = {
 getMineBaseMsg: {
  errno: 1,
  msg: {}
 }
}

const actions = {
 getMineBaseApi({commit}) {
  alert('进入action');
  api.mineBaseMsgApi()
  .then(res => {
    alert('action中调用封装后的axios成功');
    console.log('action中调用封装后的axios成功')
    commit(types.GET_BASE_API, res)
  })
 }
}

const getters = {
 getMineBaseMsg: state => state.getMineBaseMsg
}

const mutations = {
 [types.GET_BASE_API](state, res) {
  alert('进入mutation');
  state.getMineBaseMsg = { ...state.getMineBaseMsg, msg: res.data.msg }
  alert('进入mutations修改state成功');
 }
}

export default {
 state,
 actions,
 getters,
 mutations
}

然后在想取回state的组件中使用mapgetters获取state:

import { mapGetters } from 'vuex';

export default {
 ...
 computed: {
  ...mapGetters([
   'getMineBaseMsg'
  ])
 },
 ...   
}

然后在控制台查看把:

getter和mutation都已经成功了,同时我在提交state的整个过程都添加了alert,大家可以看看整个流程是如何走的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
javascript中声明函数的方法及调用函数的返回值
Jul 22 Javascript
jQuery的图片滑块焦点图插件整理推荐
Dec 07 Javascript
浅谈javascript 归并方法
Jan 21 Javascript
简单介绍JavaScript中字符串创建的基本方法
Jul 07 Javascript
深入分析javascript中console命令
Aug 14 Javascript
js中创建对象的几种方式
Feb 05 Javascript
让你彻底掌握es6 Promise的八段代码
Jul 26 Javascript
JavaScript中Object值合并方法详解
Dec 22 Javascript
基于vue2.0动态组件及render详解
Mar 17 Javascript
用Vue.js方法创建模板并使用多个模板合成
Jun 28 Javascript
Vue如何提升首屏加载速度实例解析
Jun 25 Javascript
Vue.use源码分析
Apr 22 #Javascript
uploader秒传图片到服务器完整代码
Apr 22 #Javascript
Node.js中看JavaScript的引用
Apr 22 #Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 #Javascript
Ionic2调用本地SQlite实例
Apr 22 #Javascript
ionic+AngularJs实现获取验证码倒计时按钮
Apr 22 #Javascript
移动端使用localResizeIMG4压缩图片
Apr 22 #Javascript
You might like
php中require和require_once的区别说明
2014/02/27 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
详解js的作用域、预解析机制
2018/02/05 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
python写一个md5解密器示例
2018/02/23 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
晚宴邀请函范文
2014/01/15 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
初中生操行评语大全
2014/04/24 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
Golang日志包的使用
2022/04/20 Golang