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 相关文章推荐
JS效率个人经验谈(8-15更新),加入range技巧
Jan 09 Javascript
关于html+ashx开发中几个问题的解决方法
Jul 18 Javascript
让angularjs支持浏览器自动填表
Nov 10 Javascript
jquery实现搜索框常见效果的方法
Jan 22 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
Jun 04 Javascript
AngularJS中的Directive实现延迟加载
Jan 25 Javascript
利用Jquery队列实现根据输入数量显示的动画
Sep 01 Javascript
Bootstrap table使用方法详细介绍
Dec 09 Javascript
js实现下一页页码效果
Mar 07 Javascript
使用vue制作探探滑动堆叠组件的实例代码
Mar 07 Javascript
Vue.extend 编程式插入组件的实现
Nov 18 Javascript
js实现整体缩放页面适配移动端
Mar 31 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作的文本留言本的例子(四)
2006/10/09 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
JS 时间显示效果代码
2009/08/23 Javascript
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
python模拟事件触发机制详解
2018/01/19 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
py-charm延长试用期限实例
2019/12/22 Python
Python绘制动态水球图过程详解
2020/06/03 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
J2EE相关知识面试题
2013/08/26 面试题
房地产广告词大全
2014/03/19 职场文书
公司经理聘任书
2014/03/29 职场文书
入股协议书
2014/04/14 职场文书
班级心理活动总结
2014/07/04 职场文书
文明社区申报材料
2014/08/21 职场文书
医院合作意向书范本
2015/05/08 职场文书
酒店开业主持词
2015/07/02 职场文书
PHP获取学生成绩的方法
2021/11/17 PHP
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL