繁体   English   中英

R shinydashboard动态菜单选择

[英]R shinydashboard dynamic menu selection

我在R shinydashboard中创建了动态sibebar菜单。 即使我使用selected = TRUE ,在此动态模式下启动时也不会selected = TRUE与菜单关联的menuItem。

如何确保在此动态模式下启动时显示哪个menuItem的内容?

我一直在搜索类似的帖子。 到目前为止找不到任何有用的东西。 updateTabItems()似乎不起作用。

有任何想法吗? 谢谢你提前。

library(shiny)
library(shinydashboard)
ui <- dashboardPage(
  dashboardHeader(title = "Dynamic sidebar"),
  dashboardSidebar(
    sidebarMenuOutput("menu")
  ),
  dashboardBody(
        tabItems(
          tabItem(tabName = "m1", p("Menu content 1") ),
          tabItem(tabName = "m2", p("Menu content 2") )
    )
   )
)
server <- function(input, output) {
  output$menu <- renderMenu({
    sidebarMenu(
      menuItem("Menu item1", tabName="m1", icon = icon("calendar")),
      menuItem("Menu item2", tabName="m2", icon = icon("database"),selected = TRUE)
    )
  })
}
shinyApp(ui, server)

编辑:Romain的anwser发生的缩进问题 HSH

您有效地使用updateTabItems() 为此,您必须为sidebarMenu设置id并更新相应的menuItemmenuSubItem

对于您的具体情况,您应该这样做:

library(shiny)
library(shinydashboard)
ui <- dashboardPage(
  dashboardHeader(title = "Dynamic sidebar"),
  dashboardSidebar(
    sidebarMenu(id="tabs",
    sidebarMenuOutput("menu")
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName = "m1", p("Menu content 1") ),
      tabItem(tabName = "m2", p("Menu content 2") )
    )
  )
)
server <- function(input, output,session) {

  output$menu <- renderMenu({
    sidebarMenu(
           menuItem("Menu item1", tabName="m1", icon = icon("calendar")),
           menuItem("Menu item2", tabName="m2", icon = icon("database"))
           )
  })
  isolate({updateTabItems(session, "tabs", "m2")})
}
shinyApp(ui, server)

编辑版本以删除缩进问题

为什么不使用在app init只调用一次的观察者

observe({ # called only once at app init
  updateTabItems(session, "tabs", "m2")
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM