使用 `shinycssloaders::withSpinner` 覆盖多个输入
Use `shinycssloaders::withSpinner` to cover more than one input
我正在使用 shinycssloaders
来显示加载动画。页面上有多个从服务器加载的输入。这些输入也相互依赖。
在下面的示例中,我使用了一个反应对象来创建这种依赖关系。首先显示table,只有当table计算完成后(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 个加载器,一个用于 table,另一个用于绘图。我想结合这 2 个加载器,只显示 1 个加载动画,它覆盖整个页面,结合 table 和绘图。此外,加载应仅在所有计算完成后结束,即在绘图计算后。
我试过将 table 和绘图放入 div
并在 div 上使用微调器,但它没有用,并给出了一个空白页。
ui <- fluidPage(
withSpinner(div(
tableOutput('data'),
plotOutput('plot')
))
)
有人对此有解决方案吗?这可能使用一些不同的包吗?
您可以使用 tagList()
函数,它创建一个标签列表,允许 shinycssloaders
包一次性包装所有输入。
因此 ui 将如下所示:
ui <- fluidPage(
withSpinner(tagList(tableOutput('data'),
plotOutput('plot')))
)
Just some extra information for the animation. You can all change the style of the animation such as the the type, color, size , etc by adding these as arguments to the withSpinner(). Check the withSpinner() RDocumentation.
我正在使用 shinycssloaders
来显示加载动画。页面上有多个从服务器加载的输入。这些输入也相互依赖。
在下面的示例中,我使用了一个反应对象来创建这种依赖关系。首先显示table,只有当table计算完成后(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 个加载器,一个用于 table,另一个用于绘图。我想结合这 2 个加载器,只显示 1 个加载动画,它覆盖整个页面,结合 table 和绘图。此外,加载应仅在所有计算完成后结束,即在绘图计算后。
我试过将 table 和绘图放入 div
并在 div 上使用微调器,但它没有用,并给出了一个空白页。
ui <- fluidPage(
withSpinner(div(
tableOutput('data'),
plotOutput('plot')
))
)
有人对此有解决方案吗?这可能使用一些不同的包吗?
您可以使用 tagList()
函数,它创建一个标签列表,允许 shinycssloaders
包一次性包装所有输入。
因此 ui 将如下所示:
ui <- fluidPage(
withSpinner(tagList(tableOutput('data'),
plotOutput('plot')))
)
Just some extra information for the animation. You can all change the style of the animation such as the the type, color, size , etc by adding these as arguments to the withSpinner(). Check the withSpinner() RDocumentation.