单击下载按钮后如何关闭闪亮的模式框

How to close shiny modal box after clicking on downloadButton

我有一个 actionButton,单击它会打开一个模态对话框,提供一条小消息,让用户有机会下载数据或取消。当点击下载按钮时,downloadHandler被适当触发,数据下载成功。但是,我不知道 where/how 包括 removeModal()。我希望弹出的模态对话框在点击下载按钮时自动关闭。

library(shiny)
library(data.table)

data = data.frame(x=rnorm(10),y=rnorm(10))

get_download_handler <- function(fname, data) {
  downloadHandler(
    filename = function() paste0(fname, '.csv'),
    content = function(con) data.table::fwrite(data, con)
  )
}

ui <- fluidPage(
  actionButton(inputId = "dwnld",label = "Download Data")  
)

server <- function(input, output, session) {
  observeEvent(input$dwnld, {
    showModal(modalDialog(
      title="Download",
      "<Disclaimer Text>",
      footer = tagList(
        downloadButton(outputId = "dwnld_data","Download Data"),
        modalButton("Cancel")
      ),easyClose = TRUE
    ))
  })
  
  output$dwnld_data <-get_download_handler(fname="data",data)
}

shinyApp(ui, server)

你可以这样做:

library(shiny)
library(data.table)

data = data.frame(x = rnorm(10), y = rnorm(10))

ui <- fluidPage(
  actionButton(inputId = "dwnld", label = "Download Data")  
)

server <- function(input, output, session) {
  observeEvent(input$dwnld, {
    showModal(modalDialog(
      title = "Download",
      "<Disclaimer Text>",
      footer = tagList(
        downloadButton(outputId = "dwnld_data", "Download Data"),
        modalButton("Cancel")
      ),
      easyClose = TRUE
    ))
  })
  
  output$dwnld_data <- downloadHandler(
    filename = "data.csv",
    content = function(con){
      on.exit(removeModal())
      data.table::fwrite(data, con)
    }
  )
}

shinyApp(ui, server)