R Shiny : Prevent cssloader from showing until action button is clicked

标签 r shiny shinyjs

我想在完成一些处理时显示一个 cssloader 微调器。 cssloader 必须仅在单击 actionButton 后才会显示,这会触发数据处理(此步骤需要一些时间,由下例中的 sys.Sleep() 函数模拟)。另外,我希望它在每次由 actionButton 触发此操作时显示,而不仅仅是第一次。

这是我正在尝试的示例:

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)
   )

  observeEvent(input$getImage,{
    output$logo<-renderText({
      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)

最佳答案

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

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 来获得 react 。有效的解决方案是调用 validate(need(input$getImage, ""))render 内功能。

关于R Shiny : Prevent cssloader from showing until action button is clicked,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50687672/

相关文章:

R Shiny : display text as code on several lines

r - 从另一个 tabpanel 激活 tabpanel

javascript - Shiny :使用shinyjs禁用tabPanel()

r - 我们如何找到 rstanarm 中每次迭代的不同值?

r - 对于向量,确定索引,超过该索引的所有值均为 NA(或某个值)

r - 在 shinyapps.io 上部署 R markdown 文档

r - 使用 includeHTML 时 sidebarMenu 无法正常工作

r - 从应用程序内部重新启动 Shiny 的应用程序(重新加载数据)

r - Knitr 在 R 代码中转义 latex 特殊字符(例如,〜,$)

删除字符串开头但不结尾的模式