【发布时间】:2017-08-12 15:55:50
【问题描述】:
我想构建一个闪亮的网络应用,其中:
- 首先,出现一个页面供用户输入选择(例如下拉框、文本字段输入等)
- 有一个下一步按钮供用户单击,该按钮将引导他们进入下一页,在那里他们可以输入/回答另一组问题。
- 然后在最后一页中,将根据输入显示结果(可视化/分析)。
- 如果用户想要修改他们的答案/输入,则可以使用后退按钮
是否有任何小部件/方法可以做到这一点?
任何建议将不胜感激:-)
干杯!
【问题讨论】:
我想构建一个闪亮的网络应用,其中:
是否有任何小部件/方法可以做到这一点?
任何建议将不胜感激:-)
干杯!
【问题讨论】:
您可以将应用程序的各个部分放在 div 中,并使用 shinyjs 包显示和隐藏它们。这也允许您为进入应用程序的下一部分构建条件。请参见下面的示例。在这个例子中,用户只有回答了第一部分的问题,才能继续到第二部分。
希望这会有所帮助!
library(shiny)
library(shinyjs)
ui<- shinyUI(fluidPage(
useShinyjs(),
div(id="div_1",
h3('Section 1'),
textInput("question1","what is the airspeed velocity of an unladen swallow?"),
actionButton("continue1","Continue.")
),
shinyjs::hidden(div(id="div_2",
h3('Section 2'),
textInput("question2","what is your favorite color?"),
actionButton("continue2","Continue."),
actionButton("goback2","Go back!")
)),
shinyjs::hidden(div(id="div_3",
h3('Section 3'),
textOutput("results"),
actionButton("goback3","Go back!")
))
)
)
server <- function(input,output)
{
observeEvent(input$continue1,{
if(nchar(input$question1)>0)
{
shinyjs::hide("div_1")
shinyjs::show("div_2")
}
else
{
showModal(modalDialog(
title = "Important message",
"How about you actually answer the question before continuing?"
))
}
})
observeEvent(input$continue2,{
shinyjs::hide("div_2")
shinyjs::show("div_3")
})
observeEvent(input$goback2,{
shinyjs::hide("div_2")
shinyjs::show("div_1")
})
observeEvent(input$goback3,{
shinyjs::hide("div_3")
shinyjs::show("div_2")
})
output$results <- renderText({paste0("Your answers were: '", input$question1,"' and '", input$question2, "'.") })
}
shinyApp(ui,server)
【讨论】: