R 渲染后禁用下载按钮
我想动态更改downloadButton标签(响应R 渲染后禁用下载按钮,r,shiny,R,Shiny,我想动态更改downloadButton标签(响应save_format),我想首先禁用downloadButton。我试着遵循中给出的建议,但它似乎只模糊了下载按钮,但我仍然可以点击它。下面是一个例子: library(shiny) ui <- navbarPage( title = "TEST", tabPanel( "EXAMPLE", b
save_format
),我想首先禁用downloadButton。我试着遵循中给出的建议,但它似乎只模糊了下载按钮,但我仍然可以点击它。下面是一个例子:
library(shiny)
ui <- navbarPage(
title = "TEST",
tabPanel(
"EXAMPLE",
bootstrapPage(
absolutePanel(
uiOutput(outputId = "download_ui"),
selectInput(
inputId = "save_format",
label = NULL,
choices = c("format1", "format2"),
selected = "csv"
)
)
)
)
)
server <- function(input, output) {
output$download_ui <- renderUI({
downloadButton(
outputId = "download",
label = str_c("Download ", input$save_format),
disabled = ""
)
})
output$download <- downloadHandler(
filename = function() {
str_c("file-", Sys.Date(), ".", input$save_format)
},
content = function(file){
# some function for saving in correct format
}
)
}
shinyApp(ui = ui, server = server)
库(闪亮)
ui您可以有点偷偷摸摸,允许downloadHandler
设置反应值,然后响应反应值的更改。这对我很有用:
library(shiny)
library(shinyjs)
ui <- navbarPage(
useShinyjs(),
title = "TEST",
tabPanel(
"EXAMPLE",
bootstrapPage(
absolutePanel(
uiOutput(outputId = "download_ui"),
selectInput(
inputId = "save_format",
label = NULL,
choices = c("format1", "format2"),
selected = "csv"
)
)
)
)
)
server <- function(input, output) {
v <- reactiveValues(
downloadDone=FALSE
)
output$download_ui <- renderUI({
downloadButton(
outputId = "download",
label = str_c("Download ", input$save_format)
)
})
observeEvent(v$downloadDone, {
if (v$downloadDone) disable("download")
else enable("download")
})
output$download <- downloadHandler(
filename = function() {
str_c("file-", Sys.Date(), ".", input$save_format)
},
content = function(file){
v$downloadDone <- TRUE
}
)
}
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyjs)
ui您可以有点偷偷摸摸,允许downloadHandler
设置反应值,然后响应反应值的更改。这对我很有用:
library(shiny)
library(shinyjs)
ui <- navbarPage(
useShinyjs(),
title = "TEST",
tabPanel(
"EXAMPLE",
bootstrapPage(
absolutePanel(
uiOutput(outputId = "download_ui"),
selectInput(
inputId = "save_format",
label = NULL,
choices = c("format1", "format2"),
selected = "csv"
)
)
)
)
)
server <- function(input, output) {
v <- reactiveValues(
downloadDone=FALSE
)
output$download_ui <- renderUI({
downloadButton(
outputId = "download",
label = str_c("Download ", input$save_format)
)
})
observeEvent(v$downloadDone, {
if (v$downloadDone) disable("download")
else enable("download")
})
output$download <- downloadHandler(
filename = function() {
str_c("file-", Sys.Date(), ".", input$save_format)
},
content = function(file){
v$downloadDone <- TRUE
}
)
}
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyjs)
ui当然shinyjs::disable
不起作用,因为下载按钮尚未呈现。这里有一种方法可以避免renderUI
,这样您就可以使用禁用
。它还使用runjs
运行一些JS代码来更改标签
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
downloadButton("downloadData", "Download"),
br(),
selectInput(
inputId = "save_format",
label = NULL,
choices = c("csv", "xlsx"),
selected = "csv"
)
)
server <- function(input, output) {
# Our dataset
data <- mtcars
output$downloadData <- downloadHandler(
filename = function() {
paste("data-", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(data, file)
}
)
disable("downloadData") # disable download button
observeEvent(input$save_format, { # change download button label
runjs(
sprintf("$('#downloadData').contents()[2].nodeValue = '\\rDownload %s\\r'",
input$save_format)
)
})
}
shinyApp(ui, server)
库(闪亮)
图书馆(shinyjs)
ui当然shinyjs::disable
不起作用,因为下载按钮尚未呈现。这里有一种方法可以避免renderUI
,这样您就可以使用禁用
。它还使用runjs
运行一些JS代码来更改标签
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
downloadButton("downloadData", "Download"),
br(),
selectInput(
inputId = "save_format",
label = NULL,
choices = c("csv", "xlsx"),
selected = "csv"
)
)
server <- function(input, output) {
# Our dataset
data <- mtcars
output$downloadData <- downloadHandler(
filename = function() {
paste("data-", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(data, file)
}
)
disable("downloadData") # disable download button
observeEvent(input$save_format, { # change download button label
runjs(
sprintf("$('#downloadData').contents()[2].nodeValue = '\\rDownload %s\\r'",
input$save_format)
)
})
}
shinyApp(ui, server)
库(闪亮)
图书馆(shinyjs)
ui它在第一次单击后工作,但我仍然可以在运行应用程序时点击下载,然后禁用以启动并适当调整逻辑。它在第一次单击后工作,但我仍然可以在运行应用程序时点击下载,然后禁用以启动并适当调整逻辑。