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 相关文章推荐
9个javascript语法高亮插件 推荐
Jul 18 Javascript
jQuery的deferred对象使用详解
Aug 20 Javascript
jcrop基本参数一览
Jul 16 Javascript
超简单JS二级、多级联动的简单实例
Feb 18 Javascript
javascript实现列表切换效果
May 02 Javascript
基于jQuery实现动态搜索显示功能
May 05 Javascript
js中 计算两个日期间的工作日的简单实例
Aug 08 Javascript
angular中的cookie读写方法
Aug 02 Javascript
vue-prop父组件向子组件进行传值的方法
Mar 01 Javascript
vue短信验证性能优化如何写入localstorage中
Apr 25 Javascript
vue element 生成无线级左侧菜单的实现代码
Aug 21 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
Nov 26 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防注入安全代码
2008/04/09 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
基于jquery的多功能软键盘插件
2012/07/25 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
Vuex简单入门
2017/04/19 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
Python三级菜单的实例
2017/09/13 Python
python实现感知器算法详解
2017/12/19 Python
django迁移数据库错误问题解决
2019/07/29 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
python软件都是免费的吗
2020/06/18 Python
个人自荐材料
2014/05/23 职场文书
娱乐节目策划方案
2014/06/10 职场文书
党员批评与自我批评
2014/10/15 职场文书
质量保证书
2015/01/17 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书