Итак, для более полного примера того, как вы можете использовать это всплывающее окно для подтверждения загрузки, вы можете сделать следующее:
- Мы создаем другую кнопку действия на основе примеров здесь
- Мы собираемся скрыть оригинал
downloadButton
с помощью style = "visibility: hidden;"
- Мы будем прослушивать событие загрузки через
document.getElementById('downloadData').click();
- Мы собираемся создать
reactiveValues
переменная, чтобы узнать, хотят ли пользователи загружать данные или нет - Наконец, нам нужно сбросить ответ, чтобы вы могли постоянно нажимать кнопку
Ok
во всплывающем окне, иначе он не сработает снова, поскольку он установлен на TRUE
library(shiny)
library(shinyalert)
ui <- fluidPage(
shinyjs::useShinyjs(),
useShinyalert(),
actionButton("init", "Download", icon = icon("download")),
downloadButton("downloadData", "Download", style = "visibility: hidden;")
)
server <- function(input, output, session) {
global <- reactiveValues(response = FALSE)
observeEvent(input$init,{
shinyalert("Confirmation",
"Do you want to download the data?",
type = "success",
callbackR = function(x) {
global$response <- x
},
showCancelButton = TRUE
)
})
observeEvent(global$response,{
if(global$response){
shinyjs::runjs("document.getElementById('downloadData').click();")
global$response <- FALSE
}
})
output$downloadData <- downloadHandler(
filename = function() {
paste("data-", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(mtcars, file)
}
)
}
shinyApp(ui, server)
введите описание изображения здесь