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实现页面滚动图片加载(仿lazyload效果)
Jul 22 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
Mar 02 Javascript
javascript中几个容易混淆的概念总结
Apr 14 Javascript
浅析AngularJs HTTP响应拦截器
Dec 28 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
Dec 06 Javascript
小程序开发基础之view视图容器
Aug 21 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 Javascript
教你完全理解ReentrantLock重入锁
Jun 03 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
Jul 02 Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 Javascript
小程序实现点击tab切换左右滑动
Nov 16 Javascript
Vue实现简单购物车功能
Dec 13 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 多线程上下文中安全写文件实现代码
2009/12/28 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
js实现中文实时时钟
2020/01/15 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
python3调用R的示例代码
2018/02/23 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
python算法题 链表反转详解
2019/07/02 Python
使用python模拟命令行终端的示例
2019/08/13 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
个人教师自我评价范文
2013/12/02 职场文书