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 相关文章推荐
javascript函数库-集合框架
Apr 27 Javascript
关于可运行代码无法正常执行的使用说明
May 13 Javascript
引用外部js乱码问题分析及解决方案
Apr 12 Javascript
深入剖析JavaScript中的枚举功能
Mar 06 Javascript
JavaScript判断FileUpload控件上传文件类型
Sep 28 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
Nov 02 Javascript
微信小程序教程系列之视图层的条件渲染(10)
Apr 19 Javascript
jquery一键控制checkbox全选、反选或全不选
Oct 16 jQuery
Node 升级到最新稳定版的方法分享
May 17 Javascript
详解swipe使用及竖屏页面滚动方法
Jun 28 Javascript
微信小程序实现圆形进度条动画
Nov 18 Javascript
JS对象属性的检测与获取操作实例分析
Mar 17 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实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
php中namespace use用法实例分析
2016/01/22 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
JScript分割字符串示例代码
2013/09/04 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
详解jQuery插件开发方式
2016/11/22 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
Python生成随机数的方法
2014/01/14 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
Python的log日志功能及设置方法
2019/07/11 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
python实现最速下降法
2020/03/24 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
Shell如何接收变量输入
2012/09/24 面试题
应届专科生个人的自我评价
2014/01/05 职场文书
校园之声广播稿
2014/01/31 职场文书
干部年终考核评语
2015/01/04 职场文书
实习科室评语
2015/01/04 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
监护人证明
2015/06/19 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
学生会自荐信
2019/05/16 职场文书
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL