R Shiny:防止cssloader显示,直到单击操作按钮

时间:2018-06-04 19:39:30

标签: r shiny shinyjs

我希望在完成一些处理时显示一个cssloader微调器。只有在单击actionButton后才能显示cssloader,这会触发数据处理(此步骤需要一些时间,由下面示例中的compress([], []). compress([Head, Head|Rest], Out):- compress([Head|Rest], Out). compress([Head|Tail], [Head|Out]):- compress(Tail, Out). 函数模拟)。此外,我希望每次动作都由actionButton触发时显示,而不仅仅是第一次。

以下是我尝试的例子:

sys.Sleep()

1 个答案:

答案 0 :(得分:0)

我敢打赌,有更好的方法来完成我需要的东西,但这是一个解决方案:

library(shiny)
library(shinycssloaders)

ui <- fluidPage(
  titlePanel("CSS loader test"),

  sidebarLayout(
    sidebarPanel(
      selectInput("imageOptions", "Choose an image:", choices = list(option1="RStudio-Logo-Blue-Gradient.png", option2="RStudio-Logo-All-Gray.png")),
      actionButton("getImage", "Show image:")
    ),

    mainPanel(
      withSpinner(uiOutput("logo"))
    )
  )
)

server <- function(input, output) {
  url<-reactive(
    paste0("https://www.rstudio.com/wp-content/uploads/2014/07/", input$imageOptions)
  )
  output$logo<-renderText({
    validate(need(input$getImage, "")) #I'm sending an empty string as message.
    input$getImage
      URL<-isolate(url())
      print(URL)
      Sys.sleep(2)
      c('<center><img src="', URL, '"width="50%" height="50%" align="middle"></center>')
  })
}
# Run the application 
shinyApp(ui = ui, server = server)

而不是通过调用observeEvent来获得反应,而是使用validate(need(input$getImage, ""))函数内的render调用。