闪亮仪表板 - 显示专用的“加载...”页面,直到完成数据的初始加载

时间:2016-02-24 10:27:24

标签: r shiny shinydashboard shinyjs

我在server.R中从数据库初始加载数据需要几秒钟。在此之前,显示的页面会失真(选择框中的数据错误,框的奇怪位置,见下文)。 Distorted display

我希望在数据完全加载之前显示不同的页面(或至少在我的第一个显示的标签中显示不同的内容)。

我考虑使用基于专用全局变量(initial_loading_done)的条件来做某种conditionalPanel,但是无论我在哪里尝试放置conditionalPanel它都不起作用。

这是我的UI.R的结构:

shinyUI(

  dashboardPage(
    dashboardHeader(title = "Title"),
    dashboardSidebar(
       sidebarMenu(
           menuItem("Tab1", tabName = "Tab1",icon = icon("dashboard")),
           menuItem("Tab2", tabName = "Tab2",  icon = icon("bar-chart-o"))
       )
    ),
    dashboardBody(
       includeCSS("custom_css.css"),
       tabItems(
           tabItem(tabName = "Tab1", 
                   fluidRow(<content>),
                   mainPanel(
                      fluidRow(<content>)
                   )
           ),
           tabItem(tabName = "Tab2",
                  fluidRow(<content>),
                  mainPanel(
                      dataTableOutput('my_data_table')  
                  )
           )
       )
    )
 )
)

3 个答案:

答案 0 :(得分:22)

以下是使用shinyjs

的一个非常简单的示例

我们的想法是在不同的ID下创建加载“页面”和内容“页面”,最初隐藏内容页面,并在应用程序准备好后使用show()hide()

library(shiny)
library(shinyjs)

load_data <- function() {
  Sys.sleep(2)
  hide("loading_page")
  show("main_content")
}

ui <- fluidPage(
  useShinyjs(),
  div(
    id = "loading_page",
    h1("Loading...")
  ),
  hidden(
    div(
      id = "main_content",
      "Data loaded, content goes here"
    )
  )
)

server <- function(input, output, session) {
  load_data()
}

shinyApp(ui = ui, server = server)

答案 1 :(得分:5)

<PlatformToolset>我想使用server来存储reactiveValues()条件。然后,在加载数据时,我的setupComplete设置为setupComplete

TRUE中,我们可以在ui中评估此setupComplete条件,并仅显示内容(在我的示例中为三个conditionalPanel小部件)。

这是一个有效的例子

box()

答案 2 :(得分:0)

代码

hidden(
    div(
      id = "main_content",
      "Data loaded, content goes here"
    )

不能使用tabsetPanel。但是,如果你将id移动到div级别,它可以很好地工作。感谢shinejs作者Dean Attali的提示。 https://stackoverflow.com/users/4432127/keshete

  hidden(
        div(id = "mainTabsetPanel",
          tabsetPanel(
....