2016-05-04 96 views
1

我的儀表板有問題。 我想創建一個動態邊欄菜單,但默認情況下,菜單項不起作用。用戶必須通過它來顯示它。我在這個問題上找到了一個例子 https://github.com/rstudio/shinydashboard/issues/71 但該解決方案不起作用。 如果你有想法......使用updateTabItems解決方案預先感謝您動態邊欄菜單RShiny

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(title = "Dynamic sidebar"), 
    dashboardSidebar(
    sidebarMenuOutput("menu") 
), 
    dashboardBody(tabItems(
    tabItem(tabName = "dashboard", h2("Dashboard tab content")) 
)) 
) 

server <- function(input, output) { 
    output$menu <- renderMenu({ 
    sidebarMenu(id="mytabs", 
     menuItem("Menu item", tabName="dashboard", icon = icon("calendar")) 
    ) 
    }) 
} 

shinyApp(ui, server) 
+1

而不是使用renderMenu功能,它更容易只使用htmlOutput,和renderUI,那麼你可以把你想要的東西放在那裏。 – Shape

+0

定的代碼爲我工作 –

+0

@Shape是,但我有同樣的問題: 'UI < - dashboardPage( dashboardHeader(標題= 「動態欄」), dashboardSidebar( uiOutput( 「菜單」) ), dashboardBody(的TabItems( 的TabItem(TABNAME = 「儀表板」,H2( 「信息中心標籤內容」)) )) ) 服務器< - 函數(輸入,輸出){ 輸出$菜單< - renderUI({ sidebarMenu (id =「mytabs」, menuItem(「Menu item」,tabName =「dashboard」,icon = icon(「calendar」))) }) } shinyApp(ui,server)' – CClaire

回答

3

這裏。

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(title = "Dynamic sidebar"), 
    dashboardSidebar(
    sidebarMenu(id="mytabs", 
     sidebarMenuOutput("menu") 
    ) 
), 
    dashboardBody(tabItems(
    tabItem(tabName = "dashboard", h2("Dashboard tab content")) 
)) 
) 

server <- function(input, output, session) { 
    output$menu <- renderMenu({ 
    sidebarMenu(
       menuItem("Menu item", tabName="dashboard", icon = icon("calendar")) 
    ) 
    }) 
    isolate({updateTabItems(session, "mytabs", "dashboard")}) 
} 

shinyApp(ui, server) 

要擴展到動態菜單,你可以看到這個例子。 R shinydashboard dynamic menu selection

編輯:我覺得不需要isolate但我喜歡把它放在一個方法來提高代碼的讀取

+0

是的,它工作!非常感謝你 – CClaire

+0

非常樂意幫助! – Romain