【问题标题】:Show/hide menuItem in shinydashboard在闪亮仪表板中显示/隐藏菜单项
【发布时间】:2019-08-19 08:38:43
【问题描述】:

当进入应用程序时,我需要隐藏一个 menuItem。当用户选择某个值时,必须出现 menuItem。

我试过shinyjs函数hidden,它隐藏了一个menuItem,但是当使用showtoggle时,没有出现menuItem。

我找到了R shinydashboard - show/hide multiple menuItems based on user input 并想出了这个

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



header <- dashboardHeader(title = "APP", titleWidth = 330)

sidebar <- dashboardSidebar(
  sidebarMenu(id="tabs",
              menuItem("",tabName="default"),
              menuItem("Scenarios",tabName = "scenarios", icon = icon("flag")),
              uiOutput("recOpt"),
              menuItem("Simulation", tabName = "game", icon = icon("gamepad")), 
              menuItem("Actions", tabName = "actions", icon = icon("folder"),
                              menuSubItem("Save project", tabName = "save"),
                              menuSubItem("Open project", tabName = "open")
                       )
              )
)

body <- dashboardBody(
  tabItems(
    tabItem(tabName = "scenarios",
            useShinyjs(),
            radioButtons("radio", h3("Radio buttons"),
                         choices = list("Choice 1" = 1,
                                        "Choice 2" = 2,
                                        "Choice 3" = 3))
    )
  )
)


ui <- dashboardPage(header, sidebar, body)


server <- function(input, output) {
  output$recOpt <- renderUI({
      if(input$radio == 2)
        menuItem("Options", tabName = "recOpt", icon = icon("bell"),
                 menuSubItem("No option",tabName="RO_00"),
                 menuSubItem("Option 1",tabName="RO_01")
        )
  })
}

shinyApp(ui, server)

它可以工作,但隐藏/显示的项目未正确对齐,编码也不正确。

有什么想法可以让它变得更好吗?

【问题讨论】:

    标签: r shiny shinydashboard shinyjs


    【解决方案1】:

    有点晚了,但无论如何: 检查 dynamic content 上的 shinydashboard 功能。

    应该这样做:

    library(shiny)
    library(shinydashboard)
    library(shinyjs)
    
    header <- dashboardHeader(title = "APP", titleWidth = 330)
    
    sidebar <- dashboardSidebar(
      sidebarMenu(id="tabs",
                  menuItem("",tabName="default"),
                  menuItem("Scenarios",tabName = "scenarios", icon = icon("flag")),
                  menuItemOutput("recOpt"),
                  menuItem("Simulation", tabName = "game", icon = icon("gamepad")), 
                  menuItem("Actions", tabName = "actions", icon = icon("folder"),
                           menuSubItem("Save project", tabName = "save"),
                           menuSubItem("Open project", tabName = "open")
                  )
      )
    )
    
    body <- dashboardBody(
      tabItems(
        tabItem(tabName = "scenarios",
                useShinyjs(),
                radioButtons("radio", h3("Radio buttons"),
                             choices = list("Choice 1" = 1,
                                            "Choice 2" = 2,
                                            "Choice 3" = 3))
        )
      )
    )
    
    ui <- dashboardPage(header, sidebar, body)
    
    server <- function(input, output) {
      output$recOpt <- renderMenu({
        if(input$radio == 2)
          menuItem("Options", tabName = "recOpt", icon = icon("bell"),
                   menuSubItem("No option",tabName="RO_00"),
                   menuSubItem("Option 1",tabName="RO_01")
          )
      })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 这里也有点晚了,但无论如何 :) 你能否详细说明一下你究竟做了什么来解决这个问题?至少对我来说,发现您将uiOutput 更改为menutItemOutput 花了很长时间
    • 这就是区别。在这种情况下,uiOutput 的问题在于它创建了一个div 标记。但是,对于 menuItems,我们需要创建一个 li 标记。这就是menutItemOutput 所做的。您可以通过右键单击 -> inpsect 检查生成的 HTML。干杯
    • @ismirsehregal 如果我点击不同的单选按钮,如何使生成的menuItem 消失?
    • 您需要在 if 条件中添加或交换 input$your_different_radiobutton
    猜你喜欢
    • 1970-01-01
    • 2019-02-23
    • 2016-01-06
    • 2016-12-09
    • 2020-01-03
    • 2021-03-02
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多