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实现的水平和垂直居中的div窗口
Aug 08 Javascript
jquery判断浏览器类型的代码
Nov 05 Javascript
多个checkbox被选中时如何判断是否有自己想要的
Sep 22 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 Javascript
Angular之指令Directive用法详解
Mar 01 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
jQuery实现仿京东防抖动菜单效果示例
Jul 06 jQuery
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 Javascript
Vue中图片Src使用变量的方法
Oct 30 Javascript
微信小程序开发摇一摇功能
Nov 22 Javascript
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
Vue实现多页签组件
Jan 14 Vue.js
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一些十分严重的缺陷详解
2013/06/03 PHP
php 获取本地IP代码
2013/06/23 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
php实现插入排序
2015/03/29 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
基于Vue.js的表格分页组件
2016/05/22 Javascript
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
通过实例了解JS 连续赋值
2019/09/24 Javascript
Python生成验证码实例
2014/08/21 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
大学校庆策划书
2014/01/31 职场文书
反对邪教标语
2014/06/30 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
Python if else条件语句形式详解
2022/03/24 Python