0

shinycssloaders用来显示加载动画。页面上有多个从服务器加载的输入。这些输入也相互依赖。

在下面的示例中,我使用了一个响应式对象来创建这种依赖关系。首先显示表格,只有当表格计算完成时(rv$a <- 1)绘图才能完成。

library(shiny)
library(shinycssloaders)

ui <- fluidPage(
    withSpinner(tableOutput('data')),
    withSpinner(plotOutput('plot'))
)

server <- function(input, output) {
  rv <- reactiveValues(a = NULL)
  
  output$data <- renderTable({
    #Some long calculation here, using Sys.sleep for simplicity
    Sys.sleep(2)
    rv$a <- 1
    head(mtcars)
  })
  
  output$plot <- renderPlot({
    req(rv$a)
    #Some long calculation here, using Sys.sleep for simplicity
    Sys.sleep(2)
    plot(rnorm(100), rnorm(100))
  })
}

shinyApp(ui, server)

这工作正常,但它显示了 2 个加载器,一个用于表格,另一个用于绘图。我想组合这 2 个加载器并仅显示 1 个加载动画,它覆盖整个页面组合表和绘图。此外,只有在所有计算完成后才应结束加载,即在绘图计算之后。

我曾尝试将表格和绘图放入 adiv并在 div 上使用微调器,但它不起作用并给出了一个空白页。

ui <- fluidPage(
  withSpinner(div(
    tableOutput('data'),
    plotOutput('plot')
  ))
)

有人对此有解决方案吗?这可能使用一些不同的包吗?

4

1 回答 1

1

您可以使用该tagList()函数,它创建一个标签列表,允许shinycssloaders包一次性将所有输入包装在其中。

所以 ui 将如下所示:

ui <- fluidPage(
  withSpinner(tagList(tableOutput('data'),
          plotOutput('plot')))
)

只是动画的一些额外信息。您可以通过将这些作为参数添加到 withSpinner() 来更改动画的样式,例如类型、颜色、大小等。检查withSpinner() RDocumentation。

于 2021-07-05T13:22:14.573 回答