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 图片预览效果 推荐
Dec 22 Javascript
javascript scrollTop正解使用方法
Nov 14 Javascript
jquery检测input checked 控件是否被选中的方法
Mar 26 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
Apr 12 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
Sep 19 Javascript
React Native 截屏组件的示例代码
Dec 06 Javascript
微信小程序实现商品属性联动选择
Feb 15 Javascript
微信小程序云开发(数据库)详解
May 17 Javascript
vue项目中实现缓存的最佳方案详解
Jul 11 Javascript
JS实现关闭小广告特效
Jan 29 Javascript
JS实现简易贪吃蛇游戏
Aug 24 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
用libtemplate实现静态网页生成
2006/10/09 PHP
php 过滤器实现代码
2010/08/09 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
jquery 学习之二 属性相关
2010/11/23 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
javascript中Function类型详解
2015/04/28 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
电子商务专业学生的学习自我评价
2013/10/27 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js
原生JS实现分页
2022/04/19 Javascript