Shinydashboard не работает с uiOutput

Я настраиваю пользовательский интерфейс в server.R для большего контроля, но sparkDashboard не работает, когда определено в server.R. Я использую этот метод с 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)

Решение Вопроса

Я не думаю, что вы можете использовать толькоuiOutput создать приборную панель. Я предполагаю, что ваша цель - создать динамическую панель инструментов. Для этого вам нужно определить заголовок, тело и боковую панель в вашем пользовательском интерфейсе и использовать такие функции, какrenderMenu на SERVER, чтобы создать его. Вот пример для создания панели мониторинга со всем пользовательским интерфейсом, определенным в СЕРВЕРЕ.

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.

 SprengMeister13 июн. 2017 г., 15:27
это чрезвычайно полезно. Я не знал, что вы можете использовать сторону сервера uiOutput для передачи его в другой renderUI.
 Eduardo Bergel12 авг. 2016 г., 03:47
Мое фактическое использование немного сложнее. Я использую dashboardPage внутри navbarPage, который динамически генерируется на сервере. В моем UI.R есть одна строка, uiOutput («Приложение»). Поскольку dashboardPage не может быть вызван с использованием renderUI, этот подход не работает. Но я думаю, что вы правы, dashboardPage не может быть реализован таким образом.

Ваш ответ на вопрос