2017-07-24 59 views
2

在下面的例子中,有两个menuItem S(1和2)和一个menuSubItem(2.1)嵌套在menuItem 2.每个menuItem具有相应tabItembox多数民众赞成,其中boxtitle是menuItem的名称。如果我运行这个应用程序“菜单1”初始选择并显示box被称为“1”。如果我比点击“菜单2”menuSubItem扩大,但身体根本没有改变。 我不认为这是正常的行为,有没有办法解决这个问题?我怎样才能ADRESS父菜单项以嵌套dashboardSidebar

还有第二个问题。如果我选择了“菜单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

你看到的是正常的行为,见here

  • 没有子女的菜单项()S/menuSubItem()■必须给予TABNAME参数
  • Childfull”菜单项()s不能有一个tabName或一个选定的参数 (或者说,他们可以,但这会被Shiny完全忽略)。 相反,在大多数,其中一人可以采取startExpanded = TRUE,这 告诉闪亮到与该菜单项()扩展,即揭示 所有子

开始时,您可以访问展开的标签与我的代码下面,所以你可以创建基于这种行为,但我不认为有可能显示一个页面时点击一个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) 
+0

好。我想开始菜单项被折叠。但是当我点击一个childfull菜单项时,我希望它能够扩展并改变大型机。 有没有一种方法可以在单击父框架时直接选择其中一个menuSubItems? –

+0

我将代码添加到我的答案中,我希望这可以做到你想要的。如果您发现我的答案有帮助,请考虑接受它。谢谢! – Florian

+0

是的,这有帮助,谢谢。你对我的第二个问题有什么建议吗?这不是一个问题,但看起来很奇怪,当我在子项之外选择一个menuItem时,子项不会再次崩溃 –