当没有选择闪亮的 checkboxGroupInput 项目时禁用 downloadButton

disable downloadButton when no shiny checkboxGroupInput item selected

我希望下面闪亮的应用程序中的下载按钮只有在至少选中一个复选框时才会启用。在 this guidance 之后,下面的应用程序会在页面加载时禁用按钮,并在用户选中复选框后启用下载按钮。但是,如果用户随后取消选择所有复选框,该按钮将保持启用状态。如果用户取消选择所有复选框,是否可以对应用程序进行编程以再次禁用下载按钮?

library(shiny)
data(iris)

ui <- fluidPage(
  
  shinyjs::useShinyjs(),
  
  mainPanel(
    fluidRow(checkboxGroupInput(inputId = "iris_species", label = "Select Species", 
        choices = unique(iris$Species))),
    fluidRow(downloadButton("download_bttn" , "Download Artifact"))
  )
)

server <- function(input, output) {
  
  observe({
    if(!is.null(input$iris_species)) {
      shinyjs::enable("download_bttn")
    }
  })
  
  output$download_bttn <- downloadHandler(filename = function(){paste0("Artifact -",Sys.Date(),".csv") },
    content = function(file) {
      
      iris_mod <- iris[which(iris$Species %in% input$iris_species),]
      write.csv(iris_mod, file)
   }
  )

  # disable the download button on page load
  shinyjs::disable("download_bttn")  
  
}

shinyApp(ui = ui, server = server)

在您的 observe 中,您也需要知道 disable 它。您可以将 else 子句与 disable 一起使用,也可以只使用

  observe({
    shinyjs::toggleState("download_bttn", condition = !is.null(input$iris_species))
  })

代替您当前的 observe 块。