2017-07-24 110 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時,子項不會再次崩潰 –