shinydashboard不适用于uiOutput

时间:2016-08-08 10:30:10

标签: r shiny

我在server.R中设置UI以获得更多控制权,但在server.R中定义时,shinyDashboard不起作用。 我使用navBarPage这个方法没有问题。

此代码有效

library(shiny)     
library(shinydashboard)

ui     <- dashboardPage(  dashboardHeader( ), 
                          dashboardSidebar(),
                          dashboardBody()   )

server <- shinyServer(function(input, output) {   })
runApp(list(ui= ui, server = server))

但是这个只显示一个空页

ui     <-  uiOutput('dash')
server <- shinyServer(function(input, output) { 
  output$dash <- renderUI({   
    dashboardPage(dashboardHeader( ), 
                  dashboardSidebar(),
                  dashboardBody()  )
  }) 
})
runApp(list(ui= ui, server = server))

这是一个使用navBarPage的例子,工作正常

ui     <-  uiOutput('nav')
server <- shinyServer(function(input, output) { 
  output$nav <- renderUI({   
    navbarPage("App Title",  
               tabPanel("Tab 1"),    
               tabPanel("Tab 2")  ) 
  })
})  
runApp(list(ui= ui, server = server))

1 个答案:

答案 0 :(得分:7)

我不认为您只能使用uiOutput创建信息中心。我假设您的目标是创建动态信息中心。为此,您需要在UI中定义标题,正文和侧边栏,并在SERVER上使用renderMenu等函数来创建它。下面是一个创建仪表板的示例,其中包含在SERVER中定义的所有UI。

ui <- dashboardPage(
  dashboardHeader(title = "My Page"),
  dashboardSidebar(sidebarMenuOutput("sideBar_menu_UI")),
  dashboardBody(
    uiOutput("body_UI"),
    uiOutput("test_UI")
  )
)

server <- shinyServer(function(input, output, session) { 
  output$sideBar_menu_UI <- renderMenu({
    sidebarMenu(id = "sideBar_Menu",
      menuItem("Menu 1", tabName="menu1_tab", icon = icon("calendar")),
      menuItem("Menu 2", tabName="menu2_tab", icon = icon("database"))
    )
  }) 
  output$test_UI <- renderUI ({
    tabItems(
      tabItem(tabName = "menu1_tab", uiOutput("menu1_UI")),
      tabItem(tabName = "menu2_tab", uiOutput("menu2_UI"))
    )
  })
  output$body_UI <- renderUI ({
    p("Default content in body outsite any sidebar menus.")
  })
  output$menu1_UI <- renderUI ({
    box("Menu 1 Content")
  })
  output$menu2_UI <- renderUI ({
    box("Menu 2 Content")
  })

})

runApp(list(ui= ui, server = server))

在此示例中,默认情况下未选择侧边栏的菜单,body_UI的内容将始终可见。如果您希望仪表板在特定菜单上启动,请将sidebarMenu放在用户界面中。您也可以删除body_UI