在 Shiny 中隐藏/显示菜单项

时间:2021-03-10 23:03:25

标签: r shiny shinydashboard shinyjs

我想在用户选中一个框时隐藏和显示一个菜单项。我使用了 useShinyjs()renderMenu() 函数,但是一旦显示了 menuItem,我就无法通过取消选中该框来再次隐藏它。

这就是我所做的:

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

header <- dashboardHeader(title = "my app")

sidebar <- dashboardSidebar(
  sidebarMenu(id="menu",
              menuItem("Tab 1",tabName = "tab1", icon = icon("question")),
              menuItemOutput("another_tab"),
              menuItem("Tab 2", tabName = "tab2", icon = icon("home"))
              )
  )
)

body <- dashboardBody(
  tabItems(
    tabItem(tabName = "tab1",
            useShinyjs(),
            checkboxInput("somevalue", "Check me", FALSE)
    )
  )
)

ui <- dashboardPage(header, sidebar, body)

server <- function(input, output) {
  output$another_tab <- renderMenu({
    if(input$somevalue == TRUE)
      menuItem("My tab", tabName = "tab3", icon = icon("cogs"))
  })
}

shinyApp(ui, server)

我们怎样才能再次隐藏菜单项?

2 个答案:

答案 0 :(得分:2)

另一种方法是

  output$another_tab <- renderMenu({
    if(input$somevalue == TRUE) {
      menuItem("My tab", tabName = "tab3", icon = icon("cogs"))
    }else shinyjs::hide(selector = "a[data-value='tab3']" )
  })

答案 1 :(得分:1)

您可以创建一个空的 menuItem()

server <- function(input, output) {
  output$another_tab <- renderMenu({
    if(input$somevalue == TRUE)
      menuItem("My tab", tabName = "tab3", id="tab3", icon = icon("cogs"))
    else
      menuItem(NULL)
  })
}