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 相关文章推荐
让mayfish支持mysqli数据库驱动的实现方法
May 22 Javascript
javascript对数组的常用操作代码 数组方法总汇
Jan 27 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
May 03 Javascript
使用Java实现简单的server/client回显功能的方法介绍
May 03 Javascript
jquery mobile实现拨打电话功能的几种方法
Aug 05 Javascript
Javascript实现获取窗口的大小和位置代码分享
Dec 04 Javascript
jQuery实现简洁的导航菜单效果
Nov 23 Javascript
JavaScript截取、切割字符串的技巧
Jan 07 Javascript
详解webpack es6 to es5支持配置
May 04 Javascript
JavaScript运动框架 多值运动(四)
May 18 Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
Vue.js组件通信的几种姿势
Oct 23 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入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
js页面跳转的常用方法整理
2013/10/18 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
vue实现点击追加选中样式效果
2019/11/01 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
Python3基础之list列表实例解析
2014/08/13 Python
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
python实现用户登录系统
2016/05/21 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
实例讲解Python3中abs()函数
2019/02/19 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
台湾良兴购物网:EcLife
2019/12/01 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
大学生毕业的自我鉴定
2013/11/13 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
青年文明号创建承诺
2014/03/31 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
2014年团队工作总结
2014/11/24 职场文书
格林童话读书笔记
2015/06/30 职场文书
调研报告的主要写法
2019/04/18 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
python图片灰度化处理的几种方法
2021/06/23 Python
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
go goth封装第三方认证库示例详解
2022/08/14 Golang