当前位置: 首页 > news >正文

Vue 3 中实现页面特定功能控制

在开发 Vue 应用时,我们经常会遇到需要在特定页面启用或禁用某些功能的情况。本文将以 A父.vue 页面为例,探讨如何在点击汇总菜单时仅在该页面生效,而在其他页面不生效的问题。

1. 利用 Vue 3 的 provideinject 实现状态传递

Vue 3 提供了 provideinject 两个函数,允许我们在父组件和子组件之间传递状态,而不需要通过 props 逐级传递。

步骤一:在父组件中提供状态

首先,在 A父.vue 父组件中,我们定义一个状态 isComponentPage 来标识当前是否为组件页面,并使用 provide 函数将其提供给子组件。

<!-- A父.vue -->
<script setup>
import { provide, ref } from 'vue';
import son from '@/components/son.vue';const isComponentPage = ref(true);  // 标识是否为组件页面
provide('isComponentPage', isComponentPage);
</script>
步骤二:在子组件中注入状态

接着,在 son.vue 子组件中,我们使用 inject 函数来获取父组件提供的状态,并根据该状态控制 showSummaryRow 的值。

<!-- son.vue -->
<script setup>
import { inject, computed } from 'vue';const isComponentPage = inject('isComponentPage');  // 从父组件获取状态
const showSummaryRow = computed(() => {return isComponentPage.value;  // 仅在组件页面时显示汇总行
});
</script>

2. 根据状态控制汇总按钮的显示

son.vue 中,我们需要确保汇总按钮的显示逻辑依赖于 showSummaryRow 的值。这样,只有在 isComponentPagetrue 时,汇总按钮才会显示。

<template><ul class="server-list"><li v-if="showSummaryRow" class="server-item" @click="handleSummaryClick"><el-icon color="#0256FF"><Monitor /></el-icon><span class="server-text">汇总:共 {{ totalServerCount }} 个服务器</span></li></ul>
</template>

3. 其他页面无需额外操作

在其他页面中,由于没有提供 isComponentPage 或其值为 false,汇总按钮将不会显示。这样,我们就实现了仅在 A父.vue 页面中显示汇总按钮的功能。

总结

通过使用 Vue 3 的 provideinject,我们可以轻松地在特定页面控制功能的显示与隐藏,而无需依赖于路由判断。这种方法使得状态管理更加灵活,同时也保持了组件的独立性和可重用性。希望这篇文章能帮助你在 Vue 3 项目中实现类似的功能控制。

http://www.lryc.cn/news/494101.html

相关文章:

  • VLC 播放的音视频数据处理流水线搭建
  • 何时在 SQL 中使用 CHAR、VARCHAR 和 VARCHAR(MAX)
  • 学习笔记043——HashMap源码学习1
  • 单点登录原理
  • 【随笔】AI大模型对软件开发的影响
  • JAVA中接口类和抽象类的区别
  • 【AI系统】昇腾 AI 架构介绍
  • uniapp input只输入一个字符就自动失去焦点
  • 定时/延时任务-ScheduledThreadPoolExecutor的使用
  • 自编码器(一)
  • Spring Cloud(Kilburn 2022.0.2版本)系列教程(五) 服务网关(SpringCloud Gateway)
  • 40分钟学 Go 语言高并发:Go程序性能优化方法论
  • 一文解析Kettle开源ETL工具!
  • Tomcat新手成长之路:安装部署优化全解析(上)
  • 跟我学C++中级篇——通信的数据的传递形式
  • C语言 qsort及应用
  • 【C语言】连接陷阱探秘(4):检查外部类型
  • 打造双层环形图:基础与高级渐变效果的应用
  • 【Git】Git 完全指南:从入门到精通
  • 【mac】mac自动定时开关机和其他常用命令,管理电源设置的工具pmset
  • 【Leecode】Leecode刷题之路第62天之不同路径
  • 基于深度学习的手势识别算法
  • helm部署golang服务
  • DreamCamera2相机预览变形的处理
  • Mysql误删表中数据与误删表的恢复方法
  • lapack、blas、solver库的区别和联系
  • deepin 安装 chrome 浏览器
  • 永久免费的PDF万能水印删除工具
  • Linux网络——NAT/代理服务器
  • 大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO,VOC,COCO格式标注,4070张图片的数据集