Vuex dispatch用法

2024-05-09 10:08

本文主要是介绍Vuex dispatch用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Vuex的作用:
针对全局数据
多个组件都要使用某个变量;
但是父子组件之间传递又很麻烦
使用vuex 可以进行状态管理,可以保证数据最新

数据是存储在浏览器维护的内存中
当页面刷新f5的时候,所保存的数据被销毁

Vuex的配置:
新建文件 src\store\index.js

import Vue from 'vue'
import Vuex from 'vuex'
import common from './modules/common'
import user from './modules/user'
import metamgr from './modules/metamgr'
Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    common,
    user,
    metamgr
  },
  strict: process.env.NODE_ENV !== 'production'
})


注册vue实例
import store from '@/store'  

new Vue({
  el: '#app',
  router,
  store,

})

关于 数据 classTree 的变化
初始化
init(){
        this.$store.dispatch('metamgr/getClassTreeData')
      },

在 metamgr.js 里写入
actions 中负责处理逻辑,
将结果传入mutations(触发commit) ,
再更新state 里的对象
import API from '@/api'

const state = {
  // 类别数据 表格 树结构
  classTreeData: [],
}
const actions = {
  getClassTreeData ({commit, state}) {
    API.classes.getAllData().then(({data}) => {
      commit('getClassTreeData', data.data)
    })
  },
}
const mutations = {
  getClassTreeData (state, data) {
    state.classTreeData = data
  },
}
export default {
  namespaced: true,
  state,
  actions,
  mutations
}

 - 模块化输出


import Vue from ‘vue’
import Vuex from ‘vuex’
import common from ‘./modules/common’
import user from ‘./modules/user’
import metamgr from ‘./modules/metamgr’
Vue.use(Vuex)

export default new Vuex.Store({
modules: {
common,
user,
metamgr
},
strict: process.env.NODE_ENV !== ‘production’
})


1
获取

实战
user.js
import {getToken,setToken,getUser,setUser,removeToken} from '@/utils/auth'
import {login,getUserInfo,logout} from '@/api/login'

const user ={
    state:{
        token:getToken(),
        user:getUser()
    },
    actions:{
        Login({commit},form){
            return new Promise((resolve,reject)=>{
                login(form.username.trim(),form.password.trim()).then(response=>{
                    const resp = response.data
                    commit('SET_TOKEN',resp.data.token)
                    resolve(resp)
                }).catch(error =>{
                    reject(error)
                })
            })
        },
        GetUserInfo({commit,state}){
            return new Promise((resolve,reject)=>{
                getUserInfo(state.token).then((resp)=>{
                    const respUser = resp.data
                    commit('SET_USER',respUser.data)
                    resolve(respUser)
                }).catch((error)=>{
                    reject(error)
                })
            })
        }
    },
    mutations:{
        SET_TOKEN(state,token){
            state.token = token
            setToken(token)
        },
        SET_USER(state,user){
            state.user = user
            setUser(user)
        }
    },

}
export default user

permision.js
/**
 * 权限校验:
 *  Vue Router中的 前置钩子函数 beforeEach(to, from, next)
 * 当进行路由跳转之前,进行判断 是否已经登录 过,登录过则允许访问非登录页面,否则 回到登录页
 * 
 * to:  即将要进入的目标路由对象
 * from: 即将要离开的路由对象
 * next: 是一个方法,可以指定路由地址,进行路由跳转
 */

import router from './router'
import {getUserInfo} from './api/login'
import store from './store'

router.beforeEach((to,from,next)=>{
    /*获取token */
    let token = store.state.user.token
    if(!token){  //没有获取到token
        if(to.path!='/login'){
            next({path:'/login'})
        }else{
            next();
        }
    }else{
        if(to.path=='/login'){
            next();
        }else{
            var user = store.state.user.user
            if(JSON.stringify(user)!=undefined){
                next();
            }else{
                store.dispatch('GetUserInfo').then(resp =>{
                    if(resp.flag){
                        next();
                    }else{
                        next({path:'/login'})
                    }
                }).catch(error=>{

                })
            }
        }
    }

})


 

这篇关于Vuex dispatch用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973111

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo