在 R shiny 中,如何通过单击 selectInput 对象中的特定选择来触发模式对话框?
In R shiny, how to trigger a modal dialog by clicking on a specific selection in a selectInput object?
底部的图片最能解释我的查询。
当 运行 下面的 MWE 代码时,我想将 numericInput
for id = "rows" (侧边栏面板中的最后一个用户输入)移动到模式对话框中,由用户在 selectInput
中为 id =“selectData”选择“详细数据”选项(侧边栏面板中的第二个用户输入)。
知道怎么做吗?
我的一个尝试在下面被注释掉了。 运行 它没有注释(并且 UI 部分 numericInput("rows",...
中的行被注释掉了),你会看到模式对话框是如何在没有点击任何东西的情况下弹出的。
当用户单击“详细数据”选项时,该模式对话框应有条件地呈现。
MWE 代码:
library(shiny)
library(DT)
ui <-
fluidPage(
titlePanel("Public data library"),
sidebarLayout(
sidebarPanel(
selectInput("selectProgram", h5(strong("Select program:")),
choices = list("Beta", "Other"), selected = "Beta"),
selectInput("selectData", h5(strong("Select data to view:")),
choices = list("Summary", "Detail data"), selected = "Summary"),
numericInput("rows", "Rows of data to pull from text file:", 20, min = 1, max = 100),
),
mainPanel(
tabsetPanel(
tabPanel("Public data", value = 1,
div(style = "margin-top:15px; margin-bottom:5px"),
conditionalPanel(condition = "input.selectProgram == 'Beta'",
h4(strong(textOutput("program1",inline = TRUE)," >> ",
textOutput("data1",inline=TRUE))),
conditionalPanel(condition = "input.selectData == 'Detail data'",
DTOutput("table")
)
),
conditionalPanel(condition = "input.selectProgram == 'Other'",
h4(strong(textOutput("program2",inline = TRUE)," >> ",
textOutput("data2",inline=TRUE))),
conditionalPanel(condition = "input.selectData == 'Detail data'"
)
),
), id = "tabselected"
)
)
)
)
server <- function(input, output, session) {
output$program1 <- renderText({input$selectProgram})
output$program2 <- renderText({input$selectProgram})
output$data1 <- renderText({input$selectData})
output$data2 <- renderText({input$selectData})
# observeEvent("input$selectData == 'Detail data'",{
# showModal(
# modalDialog(
# numericInput("rows", "Rows of data to pull from text file:", 20, min = 1, max = 100),
# footer = modalButton("Close")
# ))
# })
output$table <- renderDT(datatable(iris, options = list(pageLength = 15)))
}
shinyApp(ui, server)
你的问题的关键部分似乎是如何在使用 selectInput 时获得模式对话。出于这个原因,我删除了你问题中包含的大部分额外代码,下面的代码应该符合你的需要:
library(shiny)
ui <- fluidPage(
selectInput("selectData", h5(strong("Select data to view:")),
choices = list("Summary", "Detail data"), selected = "Summary")
)
server <- function(input, output, session) {
observeEvent(input$selectData, {
if(input$selectData == 'Detail data') {
showModal(
modalDialog(
numericInput("rows", "Rows of data to pull from text file:", 20, min = 1, max = 100),
footer = modalButton("Close")
))
}
})
}
shinyApp(ui, server)
对于 observeEvent,我将其更改为专门查看输入 selectData。然后我做了一个简单的if语句,如果输入是“Detail data”,就弹出模态对话框。
底部的图片最能解释我的查询。
当 运行 下面的 MWE 代码时,我想将 numericInput
for id = "rows" (侧边栏面板中的最后一个用户输入)移动到模式对话框中,由用户在 selectInput
中为 id =“selectData”选择“详细数据”选项(侧边栏面板中的第二个用户输入)。
知道怎么做吗?
我的一个尝试在下面被注释掉了。 运行 它没有注释(并且 UI 部分 numericInput("rows",...
中的行被注释掉了),你会看到模式对话框是如何在没有点击任何东西的情况下弹出的。
当用户单击“详细数据”选项时,该模式对话框应有条件地呈现。
MWE 代码:
library(shiny)
library(DT)
ui <-
fluidPage(
titlePanel("Public data library"),
sidebarLayout(
sidebarPanel(
selectInput("selectProgram", h5(strong("Select program:")),
choices = list("Beta", "Other"), selected = "Beta"),
selectInput("selectData", h5(strong("Select data to view:")),
choices = list("Summary", "Detail data"), selected = "Summary"),
numericInput("rows", "Rows of data to pull from text file:", 20, min = 1, max = 100),
),
mainPanel(
tabsetPanel(
tabPanel("Public data", value = 1,
div(style = "margin-top:15px; margin-bottom:5px"),
conditionalPanel(condition = "input.selectProgram == 'Beta'",
h4(strong(textOutput("program1",inline = TRUE)," >> ",
textOutput("data1",inline=TRUE))),
conditionalPanel(condition = "input.selectData == 'Detail data'",
DTOutput("table")
)
),
conditionalPanel(condition = "input.selectProgram == 'Other'",
h4(strong(textOutput("program2",inline = TRUE)," >> ",
textOutput("data2",inline=TRUE))),
conditionalPanel(condition = "input.selectData == 'Detail data'"
)
),
), id = "tabselected"
)
)
)
)
server <- function(input, output, session) {
output$program1 <- renderText({input$selectProgram})
output$program2 <- renderText({input$selectProgram})
output$data1 <- renderText({input$selectData})
output$data2 <- renderText({input$selectData})
# observeEvent("input$selectData == 'Detail data'",{
# showModal(
# modalDialog(
# numericInput("rows", "Rows of data to pull from text file:", 20, min = 1, max = 100),
# footer = modalButton("Close")
# ))
# })
output$table <- renderDT(datatable(iris, options = list(pageLength = 15)))
}
shinyApp(ui, server)
你的问题的关键部分似乎是如何在使用 selectInput 时获得模式对话。出于这个原因,我删除了你问题中包含的大部分额外代码,下面的代码应该符合你的需要:
library(shiny)
ui <- fluidPage(
selectInput("selectData", h5(strong("Select data to view:")),
choices = list("Summary", "Detail data"), selected = "Summary")
)
server <- function(input, output, session) {
observeEvent(input$selectData, {
if(input$selectData == 'Detail data') {
showModal(
modalDialog(
numericInput("rows", "Rows of data to pull from text file:", 20, min = 1, max = 100),
footer = modalButton("Close")
))
}
})
}
shinyApp(ui, server)
对于 observeEvent,我将其更改为专门查看输入 selectData。然后我做了一个简单的if语句,如果输入是“Detail data”,就弹出模态对话框。