vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作


Posted in Javascript onJuly 31, 2020

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

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

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

运行命令 npm install vuex --save-dev

在项目的入口js文件 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+axios从后台获取数据存入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 ,大家可以看看整个流程是如何走的

以上这篇vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用JTrackBar实现的模拟苹果风格的滚动条
Aug 06 Javascript
JS提交并解析后台返回的XML的代码
Nov 03 Javascript
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
Jan 30 Javascript
js 键盘记录实现(兼容FireFox和IE)
Feb 07 Javascript
模拟javascript中的sort排序(简单实例)
Aug 17 Javascript
基于JS实现的随机数字抽签实例
Dec 08 Javascript
Bootstrap CSS布局之表格
Dec 17 Javascript
bootstrap table使用入门基本用法
May 24 Javascript
JavaScript反弹动画效果的实现代码
Jul 13 Javascript
vue watch监听对象及对应值的变化详解
Feb 24 Javascript
Vue 刷新当前路由的实现代码
Sep 26 Javascript
快速解决element的autofocus失效问题
Sep 08 Javascript
vue抽出组件并传值实例
Jul 31 #Javascript
Vue通过Blob对象实现导出Excel功能示例代码
Jul 31 #Javascript
Vue.js中使用Vuex实现组件数据共享案例
Jul 31 #Javascript
原生JS实现记忆翻牌游戏
Jul 31 #Javascript
js实现跳一跳小游戏
Jul 31 #Javascript
js实现翻牌小游戏
Jul 31 #Javascript
Vue 请求传公共参数的操作
Jul 31 #Javascript
You might like
PHP中的命名空间相关概念浅析
2015/01/22 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
js鼠标左右键 键盘值小结
2010/06/11 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
Vue中util的工具函数实例详解
2019/07/08 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
python多重继承实例
2014/10/11 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
在django中,关于session的通用设置方法
2019/08/06 Python
没编程基础可以学python吗
2020/06/17 Python
Python是怎样处理json模块的
2020/07/16 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
2014端午节活动策划方案
2014/01/27 职场文书
活动倡议书范文
2014/05/13 职场文书
品质标语大全
2014/06/21 职场文书
大学生安全责任书
2014/07/25 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
排球赛新闻稿
2015/07/17 职场文书