【问题标题】:shinydashboard does not work with uiOutputshinydashboard 不适用于 uiOutput
【发布时间】:2016-12-14 02:12:42
【问题描述】:

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

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我认为您不能只使用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 放在您的 UI 中。也可以删除body_UI

    【讨论】:

    • 我的实际用法有点复杂。我在 navbarPage 中使用dashboardPage,它是在服务器中动态生成的。我的 UI.R 中有一行,uiOutput("App")。由于无法使用 renderUI 调用dashboardPage,因此这种方法失败。但我认为你是对的,dashboardPage 不能这样实现。
    • 这非常有用。我不知道您可以使用 uiOutput 服务器端将其馈送到另一个 renderUI。
    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2020-09-29
    • 2016-11-01
    • 2020-06-20
    相关资源
    最近更新 更多