2016-05-04 97 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