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 简单导航实现代码
Sep 11 Javascript
JQuery SELECT单选模拟jQuery.select.js
Nov 12 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
Nov 30 Javascript
JavaScript 实现类的多种方法实例
May 01 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
Mar 24 Javascript
jQuery实现的自适应焦点图效果完整实例
Aug 24 Javascript
Bootstrap CDN和本地化环境搭建
Oct 26 Javascript
jQuery实现菜单栏导航效果
Aug 15 jQuery
详解Vue微信公众号开发踩坑全记录
Aug 21 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 Javascript
浅析vue中的MVVM实现原理
Mar 04 Javascript
Angular请求防抖处理第一次请求失效问题
May 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中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JS 控制非法字符的输入代码
2009/12/04 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
jquery连缀语法如何实现
2012/11/29 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
Python的IDEL增加清屏功能实例
2017/06/19 Python
EM算法的python实现的方法步骤
2018/01/02 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
HTML5 视频播放(video),JavaScript控制视频的实例代码
2018/10/08 HTML / CSS
美国时尚女装在线:Missguided
2016/12/03 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
校运会广播稿100字
2014/01/27 职场文书
文明餐桌活动方案
2014/02/11 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
预备党员个人总结
2015/02/14 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js