2017-08-12 155 views
1

我想建立一个闪亮的web应用程序,其中:闪亮的应用程序 - 寻呼

  • 首先,页面显示为用户输入选择(例如下拉框中,输入文本字段等)
  • 有是用户点击的下一个按钮,它将引导他们进入下一页,在那里他们可以输入/回答另一组问题。
  • 然后在最后一页,结果(可视化/分析)出现在他们的输入基础上。
  • 后退按钮是在情况下,用户需要修改他们的答案/输入

是否有任何部件/方法可以做到这一点?

任何建议将不胜感激:-)

干杯!

回答

1

您可以将应用程序的各个部分放在div中,并使用shinyjs包显示和隐藏它们。这也可以让你建立条件来推进你的应用程序的下一部分。看下面的例子。在这个例子中,如果用户在第一部分回答问题,用户只能继续第2部分。

希望这会有所帮助!

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) 
+0

谢谢。这是完美的:) –

+0

很高兴我能帮上忙。如果能解决您的问题,请考虑接受答案吗?谢谢! – Florian

相关问题