首页 > 其他分享 >在Vue3中使用vuex

在Vue3中使用vuex

时间:2024-10-15 13:43:07浏览次数:1  
标签:const Vuex Vue3 state key 使用 权限 vuex permissions

Vuex 简介

Vuex 是 Vue.js 官方的状态管理库,帮助我们在中大型应用中集中管理组件间的共享状态。它通过 stategettersmutationsactions 实现响应式数据管理


Vuex 核心概念

  • State: 全局状态,存储应用的核心数据。
  • Getters: 类似于组件中的计算属性,用于从 state 中派生出新的数据。
  • Mutations: 修改 state 的唯一方式,必须是同步操作。
  • Actions: 用于处理异步逻辑,最终通过 commit 触发 mutations 来改变 state

使用案例

在这个案例中,我们将构建一个权限管理的场景。不同的用户角色会拥有不同的权限,基于这些权限,前端界面会展示或隐藏相应的按钮。

1、 Vuex Store (权限管理模块)

import { getComponentList } from '@/api/Component';

export default {
  namespaced: true,
  state: () => ({
    componentPermissions: {}  // 存储各个页面的权限列表
  }),
  getters: {
    getPermissionByKey: (state) => (key) => {
      return state.componentPermissions[key] || {};  // 根据页面名称获取权限
    }
  },
  mutations: {
    setPermission(state, { key, permissions }) {
      state.componentPermissions = {
        ...state.componentPermissions,
        [key]: permissions
      };
    }
  },
  actions: {
    async fetchPermissions({ commit }, key) {
      const response = await getComponentList({ name: key });
      if (response.data.code === 2000) {
        commit('setPermission', { key, permissions: response.data.data });
      }
    }
  }
};

  • State: componentPermissions 保存每个页面的权限列表,以页面 key 作为字段名。
  • Mutations: setPermission 用于更新权限。
  • Actions: fetchPermissions 处理异步请求,获取权限数据并存入 state。
  • Getters: getPermissionByKey 根据页面名称获取对应的权限。

2、在组件中使用 Vuex 权限管理

我们在组件中先从 Vuex 获取权限列表,如果权限不存在,则调用 fetchPermissions

<template>
  <div>
    <div v-show="canShowNewPlanButton" class="button-container">
      <a-button type="primary" @click="showPointPlanAddModal">新建计划</a-button>
    </div>
  </div>
</template>

<script setup>
import { onMounted, ref } from 'vue';
import { useStore } from 'vuex';
import { useRoute } from 'vue-router';

const canShowNewPlanButton = ref(false);  // 控制按钮显示状态
const store = useStore();
const route = useRoute();

// 在组件加载时根据权限展示按钮
onMounted(async () => {
  const key = route.name;
  
  // 从 Vuex 获取权限
  const permissions = store.getters['permission/getPermissionByKey'](key);

  // 如果权限已经存在则直接赋值,不存在则调接口
  if (permissions.new_plan !== undefined) {
    canShowNewPlanButton.value = permissions.new_plan;
  } else {
    await store.dispatch('permission/fetchPermissions', key);
    const updatedPermissions = store.getters['permission/getPermissionByKey'](key);
    canShowNewPlanButton.value = updatedPermissions.new_plan;
  }
});
</script>

总结

  • 组件内使用 useStore 和 useRoute: 我们通过 useStore 获取 Vuex 实例,通过 useRoute 获取当前页面的路由信息,用于匹配对应的权限。
  • 权限获取逻辑:
    • 先从 Vuex 的 getters 中获取对应页面的权限数据。
    • 如果 Vuex 中没有权限数据,调用 fetchPermissions 异步获取数据,并更新 Vuex 状态。
    • 根据权限的 new_plan 字段决定是否展示按钮。

标签:const,Vuex,Vue3,state,key,使用,权限,vuex,permissions
From: https://www.cnblogs.com/wellplayed/p/18467341

相关文章

  • OpenCV高级图形用户界面(11)检查是否有键盘事件发生而不阻塞当前线程函数pollKey()的
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述轮询已按下的键。函数pollKey无等待地轮询键盘事件。它返回已按下的键的代码或如果没有键自上次调用以来被按下则返回-1。若要等待按键被按下,请使用waitKey。注意waitKey......
  • OpenCV高级图形用户界面(8)在指定的窗口中显示一幅图像函数imshow()的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述在指定的窗口中显示一幅图像。函数imshow在指定的窗口中显示一幅图像。如果窗口是以cv::WINDOW_AUTOSIZE标志创建的,图像将以原始大小显示,不过仍然受限于屏幕分辨率。否则,图像......
  • OpenCV高级图形用户界面(9)更改指定窗口的位置函数moveWindow()的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述将窗口移动到指定的位置。cv::moveWindow()函数用于更改指定窗口的位置。你可以使用这个函数来移动窗口到屏幕上的任何位置。函数原型voidcv::moveWindow ( constString......
  • 探索桂林:使用SpringBoot构建的旅游平台
    1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理桂林旅游景点导游平台的相关信息成为必然。开发合适的桂林旅游景点导游平台,可以方便管理人......
  • 保姆级教程下载finalshell以及连接云服务器基础的使用教程
    废话不多说,我们直接进行安装一、软件下载下载地址:FinalShellSSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.5.10,更新日期2024.9.26-FinalShell官网(hostbuf.com)https://www.hostbuf.com/t/988.html点击链接进行下载下载完之后 打开文......
  • 电销企业 不使用外呼系统 会面临哪些问题!!
    电销企业不使用外呼系统,会面临诸多挑战和限制业务开展效率方面:手动拨号效率低:没有外呼系统,员工只能手动在电话上逐个输入号码进行拨号,这一过程非常耗时,严重影响每日的电话拨打量和业务推进速度。例如,一个熟练的电销人员手动拨号可能每分钟只能拨打2-3个电话,而使用外......
  • Photoshop 2024中文激活安装包 ps2024永久使用
    Photoshop2024是一款功能强大的图像编辑软件,凭借先进的AI技术实现了更精准的自动选择和对象识别,为图像编辑带来革新。新版本提供了直观的图层管理功能,让用户能够轻松处理复杂项目。此外,创新的编辑工具如内容感知填充、深度编辑和智能合成等,使得图像细节处理更加自然逼真。同时,Ph......
  • 若依前端菜单管理中路由地址、组件路径、权限字符的使用
    过段时间就忘了,赶紧动笔记下来——鲁迅创建菜单时,页面上需要填写几个关键信息,以下为个人理解欢迎指正路由地址菜单类型是目录和菜单时都需要,目录类型时填写views下目录名称,菜单类型时填写vue文件所在(子)目录名,下面分开举例。先看一个效果图企业管理是目录类型,企业信息和......
  • JedisCluster 中psetex()方法如何使用
    JedisCluster 中的 psetex 方法用于设置一个键值对,并同时设置该键的过期时间(以毫秒为单位)。与 setex 的区别在于 psetex 接受的过期时间是以毫秒为单位,而 setex 接受的是以秒为单位。psetex方法说明方法签名:publicStringpsetex(Stringkey,longmilliseconds......
  • python使用smtp发送邮件
    python使用smtp发送邮件一、概述与发送邮件相关的Python模块:smtplib是关于SMTP(简单邮件传输协议)的操作模块,在发送邮件的过程中起到服务器之间互相通信的作用。email简单来说,即服务器之间通信的信息,包括信息头、信息主体等等。举个简单的例子,当你登录邮箱,写好邮件......