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验证上传文件的类型限制必须为某些格式
Nov 14 Javascript
js 自动播放的实例代码
Nov 19 Javascript
js创建对象的区别示例介绍
Jul 24 Javascript
使用node.js 制作网站前台后台
Nov 13 Javascript
jQuery插件scroll实现无缝滚动效果
Apr 27 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
May 26 Javascript
js仿腾讯QQ的web登陆界面
Aug 19 Javascript
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
JavaScript中set与get方法用法示例
Aug 15 Javascript
Vue 中对图片地址进行拼接的方法
Sep 03 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
Jan 08 jQuery
微信小程序转发事件实现解析
Oct 22 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
js 博客内容进度插件详解
2017/02/19 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
2019/05/29 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python任务调度实例分析
2015/05/19 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
在python中安装basemap的教程
2018/09/20 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Python计算信息熵实例
2020/06/18 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
《阳光》教学反思
2014/02/23 职场文书
治安消防安全责任书
2014/07/23 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
办公室管理规章制度
2015/08/04 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js