如何在嵌套的dashboardSidebar中添加父menuItem

时间:2017-07-24 11:54:04

标签: r shiny shinydashboard

在下面的示例中,有两个menuItem s(1和2)和一个menuSubItem(2.1)嵌套在menuItem内。每个menuItem都有一个相应的tabItem带有box,其中boxtitle是menuItem的名称。如果我运行此应用程序,则会初始选择“菜单1”,并显示名为“1”的box。如果我点击“菜单2”,menuSubItem会展开,但身体根本不会改变。 我不认为这是正常的行为,有没有办法解决这个问题?

还有第二个问题。如果我选择了“菜单2.1”并单击“菜单1”,为什么嵌套的menuItem不会再次崩溃?

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(disable=TRUE), 
  dashboardSidebar(
    sidebarMenu(
      menuItem(
        "Menu 1",
        tabName="menu1"
      ),
      menuItem(
        "Menu 2",
        tabName = "menu2",
        menuSubItem(
          "Menu 2.1",
          tabName = "menu2_1"
        )
      )
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName="menu1",
              box("1")
      ),
      tabItem(tabName="menu2",
              box("2")
      ),       
      tabItem(tabName="menu2_1",
              box("2.1")
     )
    )
  )
)

server <- function(input, output) {
}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

您看到的行为是正常的,请参阅here

  
      
  • Childless menuItem()s / menuSubItem()s必须赋予tabName参数
  •   
  • Childfull“menuItem()s不能有tabName或选定的参数   (或者更确切地说,他们可以,但Shiny会完全忽略这一点)。   相反,最多其中一个可以采用startExpanded = TRUE,即   告诉Shiny开始使用menuItem()展开,即揭示   所有的孩子
  •   

您可以使用下面的代码访问展开的选项卡,这样您就可以基于此创建行为,但我不认为在单击包含子项的menuItem时可以显示页面。

希望这有帮助!

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(disable=TRUE), 
  dashboardSidebar(
    sidebarMenu(
      menuItem(
        "Menu 1",
        tabName="menu1"
      ),
      menuItem(
        "Menu 2",
        expandedName = "menu2",
        menuItem(
          "Menu 2.1",
          tabName = "menu2_1"
        )
      )
    ),
    textOutput('selectedmenu')
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName="menu1",
              box("1")
      ),
      tabItem(tabName="menu2",
              box("2")
      ),       
      tabItem(tabName="menu2_1",
              box("2.1")
      )
    )
  )
)

server <- function(input, output) {
  output$selectedmenu <- renderText({
    print(input$sidebarItemExpanded)
  })


}

shinyApp(ui = ui, server = server)

展开菜单2时更改第一个标签,请求评论:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(disable=TRUE), 
  dashboardSidebar(
    sidebarMenu(id="mysidebar",
      menuItem(
        "Menu 1",
        tabName="menu1"
      ),
      menuItem(
        "Menu 2",
        expandedName = "menu2",
        menuItem(
          "Menu 2.1",
          tabName = "menu2_1"
        )
      )
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName="menu1",
              box("1")
      ),
      tabItem(tabName="menu2",
              box("2")
      ),       
      tabItem(tabName="menu2_1",
              box("2.1")
      )
    )
  )
)

server <- function(input, output,session) {
  observeEvent(input$sidebarItemExpanded, {
    updateTabItems(session,"mysidebar","menu2_1")
  })


}

shinyApp(ui = ui, server = server)