Rshinydashboard-根据用户输入显示/隐藏多个菜单项

2023-12-01

这个想法是有一个用户输入(访问代码),基于该输入可以访问不同的菜单项。所以基本上我们可以根据用户的要求提供自定义版本的应用程序。

3 个菜单项的工作示例如下:

library(shiny)
library(shinydashboard)
library(shinyjs)

ui <- dashboardPage(
                    dashboardHeader(title = "SHOW/HIDE MULTIPLE MENU ITEMS"),
                    dashboardSidebar(
                    useShinyjs(),
                    sidebarMenu(
                        id = "tabs",
                        hidden(
                        menuItem("MENU ITEM 1", tabName = "mi1"),
                        menuItem("MENU ITEM 2", tabName = "mi2"),
                        menuItem("MENU ITEM 3", tabName = "mi3")
                        ),
                        textInput(inputId = "accessToken", label = "Access Code", value = "Show/Hide Menu Items.")
                    )
                    ),
                    dashboardBody()

)

server <- function (input, output, session){
observeEvent(input$accessToken,{
    if(input$accessToken == "001"){
    hide(selector = "ul li:eq(0)")
    hide(selector = "ul li:eq(1)")
    show(selector = "ul li:eq(2)")
    } else if (input$accessToken == "010"){
        hide(selector = "ul li:eq(0)")
        show(selector = "ul li:eq(1)")
        hide(selector = "ul li:eq(2)")
    } else if (input$accessToken == "011"){
        hide(selector = "ul li:eq(0)")
        show(selector = "ul li:eq(1)")
        show(selector = "ul li:eq(2)")
    } else if (input$accessToken == "100"){
        show(selector = "ul li:eq(0)")
        hide(selector = "ul li:eq(1)")
        hide(selector = "ul li:eq(2)")
    } else if (input$accessToken == "101"){
        show(selector = "ul li:eq(0)")
        hide(selector = "ul li:eq(1)")
        show(selector = "ul li:eq(2)")
    } else if (input$accessToken == "110"){
        show(selector = "ul li:eq(0)")
        show(selector = "ul li:eq(1)")
        hide(selector = "ul li:eq(2)")
    } else if (input$accessToken == "111"){
        show(selector = "ul li:eq(0)")
        show(selector = "ul li:eq(1)")
        show(selector = "ul li:eq(2)")
    } else{
    hide(selector = "ul li") 
    }
})
}

shinyApp(ui, server)

这对于唯一访问代码可见的 3 个菜单项的所有组合都非常有效。

但正如您所看到的,这是用于访问 3 个菜单项的大量重复代码。

实际上,我有 10 个甚至更多的菜单项,因此 if else 语句的总体数量将呈指数级增长。

我已经尝试过:

我考虑了这个逻辑:对于 10 个菜单项,有一个 10 位数字的访问代码,其中每个数字可以有一个值 0(隐藏)或 1(显示)。

observeEvent(input$accessToken, {
    tokenStr <- input$accessToken
    tokenStrShow <- which(strsplit(tokenStr, "")[[1]]=="1")
    tokenStrHide <- which(strsplit(tokenStr, "")[[1]]=="0")
    for (i in tokenStrShow){
        # some logic to show all menuItems with value 1
        # FOLLOWING DOESNOT WORK
        # paste0("show(selector='ul li:eq(",i,")'")
    }
})

我也遇到过THIS我正在尝试实现的javascript逻辑。但我不知道如何在闪亮中做到这一点。


这是一个让你成长的想法sidebarMenu动态使用renderUI and uiOutput。如果选项卡数量增加,转换为 for 循环也相当简单。


enter image description here

library(shiny)
library(shinydashboard)
library(shinyjs)

ui <- dashboardPage(
  dashboardHeader(title = "SHOW/HIDE MULTIPLE MENU ITEMS"),
  dashboardSidebar(
    useShinyjs(),
    uiOutput('sidebar'),
    textInput(inputId = "accessToken", label = "Access Code", placeholder = "Show/Hide Menu Items.")
  ),
  dashboardBody()
  
)

server <- function (input, output, session){
  
  output$sidebar <- renderUI({
    
    menu_items = list()
    
    if(substr(input$accessToken,1,1)=='1')
      menu_items[[length(menu_items)+1]] = menuItem("MENU ITEM 1", tabName = "mi1")
    
    if(substr(input$accessToken,2,2)=='1')
      menu_items[[length(menu_items)+1]] = menuItem("MENU ITEM 2", tabName = "mi2")
    
    if(substr(input$accessToken,3,3)=='1')
      menu_items[[length(menu_items)+1]] = menuItem("MENU ITEM 3", tabName = "mi3")
    
    print(menu_items)
    
    sidebarMenu(id = "tabs",menu_items)

  })
}

shinyApp(ui, server)

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rshinydashboard-根据用户输入显示/隐藏多个菜单项 的相关文章

  • 从提交的表单中获取值

    我有一个非常简单的表格
  • 如何使用 JavaScript 访问 runat="server" ASP 元素?

    似乎每个人都在这样做 在代码帖子等中 但我不知道如何 每当我尝试使用 JavaScript 操作 asp 元素时 我都会得到一个 element is null or document is undefined 等等错误 JavaScrip
  • 找出 Jquery ajax 请求被重定向到的位置

    所以 我收到了这个ajax请求 请参阅 金发女郎 大约6英尺高 看起来像这样 ajax url http example com makeThing dataType html type POST data something someot
  • 无法使用 rtools40 和 R 4.0 构建 RDCOMClient

    不久前 我创建了 RDCOMClient 包的一个分支 以使其与 R 3 6 一起工作 https github com dkyleward RDCOMClient https github com dkyleward RDCOMClien
  • 是否有管理 __utma、__utmz 等 cookie 的标准?

    无论我登录 Facebook 还是 Twitter 我都会受到以下名称的 cookie 轰炸 utma utmb utmc utmv 它们的功能是什么 是否有一个标准来管理这些在服务器端的使用方式 这些 cookie 通常与谷歌分析 htt
  • React 和 ES6 继承

    Note 这篇文章是在 React 不支持 ES6 v12 时发布的 我有一个 ES6 课程 class BaseClass getInitialState return message Hello render return div di
  • HTML 5 视频:使用 javascript 播放多个“剪辑”

    我在 HTML 视频和 JavaScript 方面遇到问题 因此编写了一些简单的代码来演示 有一个视频包含三个 剪辑 全长五秒 显然 在现实世界中 它们要长得多 一个在 25 30 秒 一个在 55 60 秒 最后一个在 85 90 秒 我
  • 性能 - String.charAt(0) 与 /^.{1}/

    从概念上讲哪个应该更快 String charAt 0 or 1 regex String charAt 0 必须处理和应用正则表达式 速度测试资源 Paul S https stackoverflow com users 1615483
  • 仅在文件下载完成后设置 cookie。

    我有一个场景 我想告诉用户下载完成并提示关闭按钮 为此 我使用 jquery 插件来连续监视 cookie 以了解下载何时完成 我的问题是我想设置这个cookie fileDownload true and path 下载完成后立即进行 为
  • 单击

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我知道如何用 jquery 做到这一点 但我被 React 困住了 每当用户点击 div 时 我如何聚焦输入字段 你需要有一个onCl
  • 具有不同侧边栏的选项卡

    我正在尝试创建一个带有多个选项卡的闪亮应用程序 每个选项卡都有自己的侧边栏 我还没能让它发挥作用 任何有关错误的帮助将不胜感激 下面是代码 ui lt fluidPage titlePanel Hi sidebarLayout positi
  • 为什么闭包编译器不缩短这个?

    我不确定这只是一个错误还是一个预期的功能 基本上 我有这个微小的功能 我现在看到end这里是蓝色的 但这工作得很好 如果我将其重命名为其他名称 我仍然遇到问题 function f a b var start Math min a b va
  • 如何确定特定时间是否在javascript中给定时间范围之间

    我想检查两个时间 var open time 和 var close time 之间的 var check val var open time 23 30 var close time 06 30 var check val 02 30 i
  • 通过 javascript 从 获取点击坐标

    Example
  • 如何使我的网站兼容移动设备和平板电脑? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想让我现有的网站在手机 平板电脑上查看时自动调整 甚至在您在桌面上调整屏幕时自动调整 如果失败的话 如果太难 你有什么建议 我基本上
  • 你可以推荐什么 JavaScript 缓存 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个好的javascript内存缓存库来缓存客户端计算结果 我的要求 适用于 Internet Explorer FireFox
  • Angular 4 - “等待操作”的正确方法是什么?

    我遇到了一个简单的问题 有一个很奇怪的解决方案setTimeout 0 看看这个简单的代码 Component selector my app template div div
  • 将列类型转换为数字时更改值

    我有一个具有上面格式的数据文件 我将其加载到 R 中 并尝试使用 dist 列中的值绘制直方图 但出现错误 x 必须是数字 因此我尝试更改格式 gt head data V1 V2 1 type gene dist 2 A 64667 3
  • Leaflet R 闪亮:选择和缩放

    我正在开发一个带有闪亮和传单的工具 我希望当客户点击变量时 参见 UI 代码 例如 NE 地图会转到另一个视图 例如纯传单中的这样 L easyButton strong NE strong function zoomTo setView
  • 如何在javascript中访问请求查询字符串参数?

    我见过许多利用 RegEx 的解决方案 坦率地说 这似乎有些可笑 因为 javascript 是如此通用 必须有一种更简单的方法来访问请求参数 有人可以给我演示一下吗 我发现了一个有用的方法网的深度 http www dotnetbull

随机推荐

  • 如何连续向下滚动页面直到找到某个元素? Python 硒

    我对 Linkedin 技能部分的加载更多按钮感到困惑 我在查找按钮的 xpath 时收到此错误 selenium common exceptions NoSuchElementException Message no such eleme
  • xmlHttpRequest abort() 方法不会关闭 Internet Explorer 中的连接

    我有多个xmlHttpRequest在我的页面上 我正在尝试调用abort 对他们所有人的方法 在 FF 中效果很好 另一方面 IE 却没有做任何该死的事情 连接不会关闭 并且在请求完成之前我无法导航到另一个页面 这是什么 为什么 IE 不
  • 从 Angular 5 Universal 获取域名始终返回 127.0.0.1

    我在 Angular 5 应用程序的服务器端渲染方面遇到问题 我需要域来创建正确的链接 应用程序在不同的环境中使用 并且为每个端点创建几个包是个坏主意 所以我尝试使用堆栈中的选项 但我总是得到 127 0 0 1 4000 作为域 主机 我
  • 快速执行命令后获取终端输出

    我使用以下代码在终端中运行一些命令 system the command here 在我想知道运行这个命令的结果是什么之后 例如如果我跑 system git status 我想阅读有关我的存储库中更改的实际信息 有什么办法可以快速做到这一
  • 链表删除节点、简单链表

    我正在尝试实现一个从链表中删除节点的函数 到目前为止 我只能删除列表的第一个节点 3 我尝试从delete转到for循环 我以为内存没有分配好 我已经挣扎了几天 我不明白 请帮助我一点 这是我从大学收到的主题 include
  • 如何在 ASP.NET MVC 中禁用路由值的绑定?

    据我所知 ValueProviderDictionary 从 3 个地方获取绑定值 来自邮寄表格 来自路线值 来自查询字符串 我希望能够禁用第二个和第三个选项 我在这里看到的唯一解决方案是创建我自己的自定义 ValueProvider 复制
  • 网络浏览器打印

    Hi我正在使用 C WPF webbrowser 控件在本地计算机中显示 html 文件 我通过执行 webbrowser 控件的打印命令向我的应用程序添加了打印功能 但 Internet Explorer 的默认行为是在屏幕底部打印文件
  • ggplot2 PDF 输出中的 Unicode 字符

    如何在使用 ggplot2 创建的 PDF 绘图中使用 Unicode 字符作为标签 标题和类似内容 考虑以下示例 library ggplot2 qplot Sepal Length Petal Length data iris main
  • Python PyQT:如何从工作线程调用 GUI 函数?

    我有一个 pyqt gui 并调用一个长进程 ffmpeg 我将其放在一个单独的线程上以不阻塞 gui 然后 我想在较长命令列表中的一个命令完成时更新进度栏 问题是 我无法在工作线程之外调用 gui 线程中的函数 所以我让在工作线程中运行一
  • JCAPS 地狱小盒子

    Has anyone out there in SO land had to deal with this when you go to build a new deployment profile in JCAPS you have qu
  • avcodec_encode_video2 时出现分段错误

    我在尝试将 AVFrame 编码到数据包时遇到一些问题 在阅读整个代码之前 输入的东西正在工作 我测试了它 输出内容来自示例here 我认为是有问题的 但分段错误发生在接近末尾的循环中 这是我的简化代码 void nmain input s
  • 如何从列表中查找对象

    我使用以下程序创建从网站获取的城市列表 现在我想从我创建的列表中查找城市名称 参数 我怎么做 换句话说 如何从列表中找到对象 我试过 listOfCities find city 我收到错误 因为找不到属性 find def weather
  • 依赖于 package.json 中使用 git URL 的分支或标签?

    假设我已经分叉了一个带有错误修复程序的节点模块 并且我想在功能分支上使用我的修复版本 直到错误修复程序合并并发布 我如何在中引用我的固定版本dependencies of my package json 解决方案1 来自npm docs 使
  • 无法在 javafx 8 中加载 css 文件

    Scene listenMenu new Scene root 250 272 listenMenu getStylesheets add styles css 这对于我加载 css 文件总是有效 但是在一次小的 IntelliJ 更新之后
  • Parallel.ForEach - 访问修改后的闭包是否适用?

    我读过许多有关访问修改的闭包的其他问题 所以我了解基本原理 尽管如此 我还是无法判断 是吗 Parallel ForEach有同样的问题吗 以下面的代码片段为例 我重新计算了上周用户的使用情况统计数据 var startTime DateT
  • 我怎样才能修复反应中的路线错误

    我收到此警告 除了 App js 中包含 默认页面内容 的 之外 我看不到我的路线 我如何重写包含其他路线的代码 位置 admin 处的匹配叶路由没有元素 这意味着默认情况下它将呈现一个空值 从而导致 空 页面 我在用着 反应 17 0 2
  • for-each 内的方案延续

    我目前正在大学学习一门课程的计划 在查看一些练习时 我陷入了这个特定的练习中 教授尚未回复我之前的邮件 因此我有更多机会更快地收到答复 鉴于此代码 define list iter cc lst call cc lambda return
  • cin 的 isdigit 问题

    我有一个有符号整数变量 当我在 main 中执行此操作时 它也会给我整数值 错误 int main unsigned int a while cin gt gt a if isdigit a cout lt lt Error lt
  • ios NSError 类型

    自从我添加了这个async请求 我收到 xcode 错误Sending NSError const strong to parameter of type NSError autoreleasing changes retain relea
  • Rshinydashboard-根据用户输入显示/隐藏多个菜单项

    这个想法是有一个用户输入 访问代码 基于该输入可以访问不同的菜单项 所以基本上我们可以根据用户的要求提供自定义版本的应用程序 3 个菜单项的工作示例如下 library shiny library shinydashboard librar