2017-08-12 6 views
1

Je veux construire une application web brillante où:App Brillant - Paging

  • D'abord, une page apparaît pour les utilisateurs à la sélection d'entrée (par exemple, liste déroulante, entrée du champ de texte, etc.)
  • Il est un bouton suivant pour les utilisateurs à cliquer qui les dirigera vers la page suivante où ils peuvent entrer/répondre à une autre série de questions.
  • Ensuite, dans la dernière page, les résultats (visualisations/analytiques) apparaissent en fonction de leur entrée.
  • bouton retour est disponible au cas où les utilisateurs veulent modifier leurs réponses/entrée

Existe-t-il des widgets/façons de le faire?

Les recommandations seront très appréciés :-)

Cheers!

Répondre

1

Vous pouvez placer les parties de votre application dans les divs, et les afficher et les masquer avec le paquetage shinyjs. Cela vous permet également de créer des conditions pour passer à la prochaine partie de votre application. Voir l'exemple ci-dessous. Dans cet exemple, l'utilisateur ne peut continuer à la section 2 que s'il a répondu à la question dans la première section.

Espérons que cela aide!

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

Merci. C'est parfait :) –

+0

Content de pouvoir aider. Pourriez-vous envisager d'accepter la réponse si cela résout votre problème? Merci! – Florian