【问题标题】:Shiny App - Paging闪亮的应用程序 - 分页
【发布时间】:2017-08-12 15:55:50
【问题描述】:

我想构建一个闪亮的网络应用,其中:

  • 首先,出现一个页面供用户输入选择(例如下拉框、文本字段输入等)
  • 有一个下一步按钮供用户单击,该按钮将引导他们进入下一页,在那里他们可以输入/回答另一组问题。
  • 然后在最后一页中,将根据输入显示结果(可视化/分析)。
  • 如果用户想要修改他们的答案/输入,则可以使用后退按钮

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

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

干杯!

【问题讨论】:

    标签: r shiny widget paging


    【解决方案1】:

    您可以将应用程序的各个部分放在 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)
    

    【讨论】:

    • 谢谢。这是完美的:)
    • 很高兴我能帮上忙。如果它解决了您的问题,您会考虑接受答案吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2016-05-23
    • 2016-02-09
    • 1970-01-01
    • 2016-06-02
    • 2016-02-03
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多