2017-08-28 2 views
0

J'essaye d'implémenter un bouton 'Précédent' sur mon application RShiny qui accède à une page précédente quand on appuie dessus. Je trouve que je peux l'utiliser pour deux pages, mais cela ne fonctionne plus quand j'ai une troisième page et j'essaie de revenir à la deuxième page. Bizarrement, utiliser la même logique pour un bouton 'Suivant' fonctionne très bien.Utilisez updateNavbarPage pour ajouter le bouton 'Précédent' sur> 2 pages (s'applique également à updateTabsetPanel)

Voici un exemple reproductible minimum:

ui <- fluidPage(
       navbarPage(title = "", 
          id = "panels_main", 
          tabPanel(title = "A", #value = "intro_page", 
            p(paste("Panel A")), 
            fluidRow(column(width = 1, offset = 9, actionLink("link_to_tabpanel_B", "Next"))) 

          ), 

          tabPanel(title = "B", #value = "intro_page", 
            p(paste("Panel B")), 
            fluidRow(
             column(width = 1, offset = 0, actionLink("link_to_tabpanel_A", "Previous")), 
             column(width = 1, offset = 9, actionLink("link_to_tabpanel_C", "Next"))) 
          ), 

          tabPanel(title = "C", #value = "intro_page", 
            p(paste("Panel C")), 
            fluidRow(
             column(width = 1, offset = 0, actionLink("link_to_tabpanel_B", "Previous"))) 
          ) 
       ) 
) 

server <- function(input, output, session) { 

    observeEvent(input$link_to_tabpanel_A, { 
    newvalue <- "A" 
    updateNavbarPage(session, "panels_main", newvalue) 
    }) 

    observeEvent(input$link_to_tabpanel_B, { 
    newvalue <- "B" 
    updateNavbarPage(session, "panels_main", newvalue) 
    }) 

    observeEvent(input$link_to_tabpanel_C, { 
    newvalue <- "C" 
    updateNavbarPage(session, "panels_main", newvalue) 
    }) 
} 

shinyApp(ui = ui, server = server) 

Notez que lorsque vous exécutez l'application que vous pouvez naviguer de A à B à C en utilisant le bouton suivant, mais seul le B à A bouton fonctionne précédent. Le bouton précédent C to B ne fonctionne pas. Est-ce que quelqu'un sait pourquoi c'est et a une suggestion sur la façon de le réparer? En outre, j'ai également essayé une approche similaire en utilisant updateTabsetPanel et j'ai rencontré le même problème, donc je pense que le problème sous-jacent de mon implémentation est le même pour les deux fonctions.

Répondre

0

Deux éléments d'entrée ne peuvent pas avoir le même ID d'entrée. Essayez de changer link_to_tabpanel_B pour le deuxième lien à link_to_tabpanel_B1. J'ai modifié votre code pour faire exactement cela. Jetez un coup d'oeil:

library(shiny) 

    ui <- fluidPage(
    navbarPage(title = "", 
       id = "panels_main", 
       tabPanel(title = "A", #value = "intro_page", 
         p(paste("Panel A")), 
         fluidRow(column(width = 1, offset = 9, actionLink("link_to_tabpanel_B", "Next"))) 

       ), 

       tabPanel(title = "B", #value = "intro_page", 
         p(paste("Panel B")), 
         fluidRow(
          column(width = 1, offset = 0, actionLink("link_to_tabpanel_A", "Previous")), 
          column(width = 1, offset = 9, actionLink("link_to_tabpanel_C", "Next"))) 
       ), 

       tabPanel(title = "C", #value = "intro_page", 
         p(paste("Panel C")), 
         fluidRow(
          column(width = 1, offset = 0, actionLink("link_to_tabpanel_B1", "Previous"))) 
       ) 
    ) 
) 

    server <- function(input, output, session) { 

    observeEvent(input$link_to_tabpanel_A, { 
     newvalue <- "A" 
     updateNavbarPage(session, "panels_main", newvalue) 
    }) 

    observeEvent(input$link_to_tabpanel_B ,{ 
     newvalue <- "B" 
     updateNavbarPage(session, "panels_main", newvalue) 
    }) 

    observeEvent(input$link_to_tabpanel_B1,{ 
     newvalue <- "B" 
     updateNavbarPage(session, "panels_main", newvalue) 
    }) 

    observeEvent(input$link_to_tabpanel_C, { 
     newvalue <- "C" 
     updateNavbarPage(session, "panels_main", newvalue) 
    }) 
    } 

    shinyApp(ui = ui, server = server) 

Espérons que ça aide!

+0

Merveilleux, merci beaucoup! Cela fonctionne parfaitement et est exactement ce dont j'avais besoin. J'ai essayé d'up-voté votre réponse, mais il ne montre pas parce que je suis nouveau à débordement pile. Merci encore!! –