Показать / скрыть элемент меню на блестящей панели инструментов

Мне нужно, чтобы элемент меню был скрыт при входе в приложение. Когда пользователь выбирает определенное значение, должен появиться menuItem.

Я пробовал shinyjs функции hidden, и он скрывает элемент меню, но при использовании show или toggle элемент меню не отображается.

Я нашел R shinydashboard - показать / скрыть несколько menuItems на основе пользовательского ввода и придумал это

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)

Это работает, но скрытый / показанный элемент не выровнен правильно, а кодировка неверна.

Есть идеи, как сделать это лучше?


person Vesnič    schedule 28.03.2019    source источник


Ответы (1)


Немного поздно, но все равно: проверьте возможности 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)
person ismirsehregal    schedule 20.05.2019
comment
Здесь тоже немного поздно, но все равно :) Не могли бы вы рассказать немного о том, что именно вы сделали, чтобы это исправить? По крайней мере, мне потребовалось некоторое время, чтобы обнаружить, что вы изменили uiOutput на menutItemOutput - person Kasper Thystrup Karstensen; 15.09.2020
comment
Именно в этом разница. Проблема с uiOutput в этом случае заключается в том, что он создает тег div. Однако для menuItems нам нужно создать тег li. Это то, что делает menutItemOutput. Вы можете проверить полученный HTML-код, щелкнув правой кнопкой мыши - ›inpsect. Ваше здоровье - person ismirsehregal; 15.09.2020