Dynami c Боковое меню в RShiny с использованием renderMenu исчезает при нажатии на другой элемент меню - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь создать динамическую c панель боковой панели в R Shiny Dashboard. Я успешно добавил функциональность для добавления элемента меню боковой панели в зависимости от того, удовлетворено ли заданное условие. Однако, как только я щелкаю по любому из элементов подменю, уже присутствующих в приложении, содержимое Dynami c исчезает. Ниже приведен рабочий пример проблемы:

library(shinycssloaders)
library(shinyalert)
library(shinydashboard)
library(shinyWidgets)


ui <- dashboardPage(dashboardHeader(title = "Title"),
                     dashboardSidebar(
                       sidebarMenu(
                         id = "tabss"
                         ,menuItem("General Information", tabName = "General_Information", icon = icon("android"))
                         ,sidebarMenuOutput("dynamic_content")
                         ,menuItem("Settings", tabName = "settings", icon = icon("cogs")
                                   ,menuSubItem("Setting1", tabName = "Setting1", icon = icon("cogs"))
                                   ,menuSubItem("Setting2", tabName = "Setting2", icon = icon("cogs")))
                         )),
                       dashboardBody(
                         tabItems(
                           tabItem("General_Information",
                                   actionButton("add_menuItem",label = "Add Menu Item"))
                         )
                       )
                       )

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

  observeEvent(input$add_menuItem,{
    output$dynamic_content <- renderMenu(menuItem("Dynamic Menu","dynamicMenu"))
  })
}

shinyApp(ui, server, options = c(launch.browser = T))

В приведенном выше примере с помощью кнопки действия на странице общей информации добавляется элемент меню на боковой панели между общей информацией и настройкой. Однако при открытии подменю настройки динамически добавляемый элемент меню исчезает с боковой панели.

Я ищу обходной путь, чтобы динамически созданный элемент меню не исчезал. Буду признателен за любую помощь в этом. Пожалуйста, дайте мне знать, если какая-либо дополнительная информация будет полезна для решения. Спасибо!

1 Ответ

2 голосов
/ 24 января 2020

Я не уверен, что это то, что вы ищете, но вы могли бы добавить reactiveVal, чтобы содержать дополнительные элементы меню c. Затем вы переместили бы ваши пункты меню stati c из ui в метод server, чтобы вы могли включать их вместе с динамическими c пунктами. Надеюсь, что это может быть полезно.

library(shinycssloaders)
library(shinyalert)
library(shinydashboard)
library(shinyWidgets)

ui <- dashboardPage(dashboardHeader(title = "Title"),
                    dashboardSidebar(
                      sidebarMenu(
                        id = "tabss"
                        ,sidebarMenuOutput("dynamic_content")
                      )),
                    dashboardBody(
                      tabItems(
                        tabItem("General_Information",
                                actionButton("add_menuItem",label = "Add Menu Item"))
                      )
                    )
)

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

  menu_val <- reactiveVal(NULL)

  observeEvent(input$add_menuItem,{
    menu_val(menuItem("Dynamic Menu", "dynamicMenu"))
  })

  output$dynamic_content <- renderMenu({
    menu_list <- list(
      menuItem("General Information", tabName = "General_Information", icon = icon("android")),
      menu_val(),
      menuItem("Settings", tabName = "settings", icon = icon("cogs")
                ,menuSubItem("Setting1", tabName = "Setting1", icon = icon("cogs"))
                ,menuSubItem("Setting2", tabName = "Setting2", icon = icon("cogs")))
    )
    sidebarMenu(.list = menu_list) 
  })
}

shinyApp(ui, server)
...