簡體   English   中英

shinydashboard不適用於uiOutput

[英]shinydashboard does not work with uiOutput

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

我不認為你只能使用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的內容body_UI可見。 如果您希望儀表板在特定菜單上啟動,請將sidebarMenu放在UI中。 您也可以刪除body_UI

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM