r - 当单击另一个菜单项时,RShiny 中使用 renderMenu 的动态侧边栏菜单消失
问题描述
我正在尝试在 R Shiny Dashboard 中创建一个动态侧边栏面板。我已经成功添加了根据是否满足预定义条件来添加侧边栏菜单项的功能。但是,一旦我单击应用程序中已经存在的任何子菜单项,动态内容就会消失。以下是该问题的工作示例:
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))
在上面的示例中,使用常规信息页面上的操作按钮在侧栏面板上在常规信息和设置之间添加了一个菜单项。但是,打开设置子菜单会导致动态添加的菜单项从侧边栏中消失。
我正在寻找一种解决方法,以便动态创建的菜单项不会消失。我会欢迎并感谢任何帮助。如果有更多信息对解决方案有帮助,请告诉我。谢谢!
解决方案
我不确定这是您要查找的内容,但您可以添加一个reactiveVal
来包含额外的动态菜单项。然后,将您的静态菜单项从一个方法ui
移到一个server
方法中,这样您就可以将动态项与动态项一起包含。希望这可能会有所帮助。
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)
推荐阅读
- oracle - 我们如何通过使用执行子句重新创建 TRG_1 触发器来指定 TRG_2 触发器应在 TRG_1 触发器之前执行?
- scala - 当参数是对象类型时,如何在 F# 中要求多个接口?
- javascript - 如何对数组中的混洗元素进行编号?
- python - 如何将 PySpin 与 opencv python 一起使用?
- sightly - Sightly - 仅在有标题时才显示标题标签
- c# - Parsing LSM6DSL raw values
- python - 正则表达式匹配但 re.match() 不返回任何内容
- arrays - 这个问题是在编码测试中提出的。直到现在我都找不到解决方案
- java - Spark在kafka中写入数据集,启用KryoSerializer
- matlab - 有没有办法解决未知变量而不是使用求解?