web-dev-qa-db-fra.com

Comment basculer entre les onglets de la barre de navigation avec un bouton R brillant

J'ai besoin que l'utilisateur clique sur un bouton et passe à un tabPanel différent d'un navbarPage. Voici une application simple où cela pourrait être mis en œuvre. Comment puis-je atteindre cet objectif?

ui <- shinyUI(
 navbarPage('Test App',
  tabPanel('Page 1',
   p('This is the first tab'), br(),
   actionButton('jumpToP2', 'Jump to Second Tab')
  ),

  tabPanel('Page 2',
   p('This is the second tab'),
   actionButton('jumpToP1', 'Jump to First Tab')
  )
 )
)

server <- shinyServer(function(input, output){
  observeEvent(input$jumpToP2,{
    ## Switch active tab to 'Page 2'
  })

  observeEvent(input$jumpToP1,{
    ## Switch active tab to 'Page 1'
  })
})

shinyApp(ui, server)
8
tsouchlarakis

Vous pouvez utiliser updateTabsetPanel pour basculer entre différents tabPanels. Voir la documentation et les exemples de codes à l’adresse https://shiny.rstudio.com/reference/shiny/latest/updateTabsetPanel.html . Le code ci-dessous devrait répondre à vos exigences.

ui <- navbarPage('Test App',id = "inTabset",
                 tabPanel(title = "Panel 1", value = "panel1", 
                          actionButton('jumpToP2', 'Jump to Secon Tab')),
                 tabPanel(title = "Panel 2", value = "panel2", 
                          actionButton('jumpToP1', 'Jump to First Tab'))
        )

server <- function(input, output, session) {
    observeEvent(input$jumpToP2, {
        updateTabsetPanel(session, "inTabset",
                          selected = "panel2")
    })

    observeEvent(input$jumpToP1, {
        updateTabsetPanel(session, "inTabset",
                          selected = "panel1")
    })

}

shinyApp(ui, server)
10
discipulus

Je ne suis pas sûr que ce soit vraiment la meilleure façon pour vous de concevoir votre U ... Savez-vous que tabPanel() agira à peu près de la même manière qu'un actionButton() dans ce cas?

ui <- navbarPage('Test App',id = "inTabset",
             tabPanel(title = "Panel 1", uiOutput("panel1")),                       
             tabPanel(title = "Panel 2", uiOutput("panel2")) 
                      )
server <- function(input, output, session) {
    output$panel1 <- renderUI({
    #your UI data
    })
    output$panel2 <- renderUI({
    #your UI data
    })
}
shinyApp(ui, server)
0
Phi