我已经做了一个shiny 的应用程序(在shinydashboard中),有很多菜单和子菜单项.如下所示的树形 struct


    sidebarMenu(
      menuItem("Item 1", tabName = "item1", icon = icon("dashboard")),
      menuItem("Item 2", tabName = "item2", icon = icon("th"),
               menuSubItem("Subitem1", tabName = "subitem1"),
               menuSubItem("Subitem2", tabName = "subitem2")),
      menuItem("Item 3", tabName = "item3", icon = icon("bolt"),
               menuSubItem("Subitem3", tabName = "subitem3"),
               menuSubItem("Subitem4", tabName = "subitem4")
               )
    )

在第一页中,我有四个操作按钮.我希望当任何操作按钮被点击时,相应的"子项#"页面都可以打开.我不能用shinydashboard::updateTabItems英镑做这个.请帮帮忙.示例代码/应用程序是

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "Dynamic Tab Example"),
  dashboardSidebar(
    sidebarMenu(
      menuItem("Item 1", tabName = "item1", icon = icon("dashboard")),
      menuItem("Item 2", tabName = "item2", icon = icon("th"),
               menuSubItem("Subitem1", tabName = "subitem1"),
               menuSubItem("Subitem2", tabName = "subitem2")),
      menuItem("Item 3", tabName = "item3", icon = icon("bolt"),
               menuSubItem("Subitem3", tabName = "subitem3"),
               menuSubItem("Subitem4", tabName = "subitem4")
               )
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(
        "item1",
        actionButton("button1", "navigate to subitem1"),
        actionButton("button2", "navigate to subitem2"),
        actionButton("button3", "navigate to subitem3"),
        actionButton("button4", "navigate to subitem4")
      ),
      tabItem("subitem1",
              box(
                title = "Item 1",
                actionButton("button1", "Button 1")
              )
      ),
      tabItem("subitem2",
              box(
                title = "Item 2 Content",
                "This is the content for Item 2."
              )
      ),
      tabItem("subitem3",
              box(
                title = "Item 3 Content",
                "This is the content for Item 3."
              )
      ),
      tabItem("subitem4",
              box(
                title = "Item 4 Content",
                "This is the content for Item 4."
              )
      )
    )
  )
)

server <- function(input, output, session) {
  

}

shinyApp(ui, server)

推荐答案

这里有一个建议:删除subitem1下的actionButton"Button1"以避免两个按钮具有相同的id/在菜单中添加id,此处为"tabs"/使用带有被点击按钮id检测的updateTabItems

library(shiny)
library(shinydashboard)
library(purrr)

ui <- dashboardPage(
  dashboardHeader(title = "Dynamic Tab Example"),
  dashboardSidebar(
    sidebarMenu(id = "tabs",
      menuItem("Item 1", tabName = "item1", icon = icon("dashboard")),
      menuItem("Item 2", tabName = "item2", icon = icon("th"),
               menuSubItem("Subitem1", tabName = "subitem1"),
               menuSubItem("Subitem2", tabName = "subitem2")),
      menuItem("Item 3", tabName = "item3", icon = icon("bolt"),
               menuSubItem("Subitem3", tabName = "subitem3"),
               menuSubItem("Subitem4", tabName = "subitem4")
      )
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(
        "item1",
        actionButton("button1", "navigate to subitem1"),
        actionButton("button2", "navigate to subitem2"),
        actionButton("button3", "navigate to subitem3"),
        actionButton("button4", "navigate to subitem4")
      ),
      tabItem("subitem1",
              box(
                title = "Item 1"
              )
      ),
      tabItem("subitem2",
              box(
                title = "Item 2 Content",
                "This is the content for Item 2."
              )
      ),
      tabItem("subitem3",
              box(
                title = "Item 3 Content",
                "This is the content for Item 3."
              )
      ),
      tabItem("subitem4",
              box(
                title = "Item 4 Content",
                "This is the content for Item 4."
              )
      )
    )
  )
)

server <- function(input, output, session) {
  
  
  paste0('button', 1:4) %>% 
    map(~ observeEvent(input[[.x]], {
      number = gsub("\\D", "", .x)
      updateTabItems(session, "tabs", paste0("subitem", number))
    }))
  
}

shinyApp(ui, server)

R相关问答推荐

如何在ggplot 2 geom_segment图表中将UTC转换为EET?

检测(并替换)字符串中的数学符号

从有序数据中随机抽样

带有叠加饼图系列的Highmap

使用tidyverse方法绑定行并从一组管道列表执行左连接

ggplot的轴标签保存在officer中时被剪切

RStudio中相关数据的分组箱形图

从外部文件读取多个值作为字符向量

您是否可以使用facet_rap设置一个较低的限制来对ggmap上的比例中断进行zoom ?

Ggplot2中geom_tile的动态zoom

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

安全地测试文件是否通过R打开

数值型数据与字符混合时如何进行绑定

按组和连续id计算日期差

使用ifElse语句在ggploy中设置aes y值

R中的Desolve:返回的导数数错误

计算多变量的加权和

从字符串01JAN2021创建日期

合并多个数据帧,同时将它们的名称保留为列名?

用逗号拆分字符串,并删除一些字符