2017-08-12 160 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

相關問題