2016-08-08 33 views
1

我在server.R中設置了UI以獲得更多控制,但在server.R中定義時,shinyDashboard不起作用。 我用這個方法navBarPage沒有問題。shinydashboard不能與uiOutput一起使用

此代碼的工作

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)) 

回答

3

我不認爲您只能使用創建儀表板的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

+0

我的實際使用情況有點複雜。我在navbarPage中使用dashboardPage,這是在服務器中動態生成的。在我的UI.R,uiOutput(「App」)中有一行。由於dashboardPage無法使用renderUI調用,因此此方法失敗。但我認爲你是正確的,dashboardPage不能這樣實現。 –

+0

這非常有幫助。我不知道你可以使用uiOutput服務器端將它提供給另一個renderUI。 – SprengMeister

相關問題