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里filter()函数与find()函数用法分析
Jun 24 Javascript
JS实现文档加载完成后执行代码
Jul 09 Javascript
jQuery使用animate创建动画用法实例
Aug 07 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
Nov 27 Javascript
深入理解js promise chain
May 05 Javascript
Bootstrap3 内联单选和多选框
Dec 29 Javascript
js实现点击展开隐藏效果(实例代码)
Sep 28 Javascript
JavaScript实现简单音乐播放器
Apr 17 Javascript
详解javascript对数组和json数组的操作
Apr 15 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
Apr 29 Javascript
vue实现分页栏效果
Jun 28 Javascript
基于JavaScript实现随机点名器
Feb 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
人大复印资料处理程序_查询篇
2006/10/09 PHP
在PWS上安装PHP4.0正式版
2006/10/09 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
python中的print()输出
2019/04/12 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
Opencv求取连通区域重心实例
2020/06/04 Python
提高python代码运行效率的一些建议
2020/09/29 Python
python 调整图片亮度的示例
2020/12/03 Python
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
安全教育实施方案
2014/03/02 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
售房协议书
2014/08/19 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
MySQL GRANT用户授权的实现
2021/06/18 MySQL