2016-04-20 11 views
5

Ho creato menu dinamici con sibrabar in R shinydashboard. Anche se utilizzo selected = TRUE, nessun menuItem associato ad un menu viene selezionato all'avvio in questa modalità dinamica.Selezione dinamica del menu shinydash R

Come posso essere sicuro di avere il controllo su quale menuItem viene mostrato all'avvio in questa modalità dinamica?

Ho cercato dappertutto attraverso post simili. Non ho trovato nulla che funzioni finora. updateTabItems() non sembra funzionare.

Qualche idea? grazie da anticipo.

library(shiny) 
library(shinydashboard) 
ui <- dashboardPage(
    dashboardHeader(title = "Dynamic sidebar"), 
    dashboardSidebar(
    sidebarMenuOutput("menu") 
), 
    dashboardBody(
     tabItems(
      tabItem(tabName = "m1", p("Menu content 1")), 
      tabItem(tabName = "m2", p("Menu content 2")) 
    ) 
    ) 
) 
server <- function(input, output) { 
    output$menu <- renderMenu({ 
    sidebarMenu(
     menuItem("Menu item1", tabName="m1", icon = icon("calendar")), 
     menuItem("Menu item2", tabName="m2", icon = icon("database"),selected = TRUE) 
    ) 
    }) 
} 
shinyApp(ui, server) 

Edit: problema che si verifica con rientro anwser di Romain hsh

+0

Avete bisogno di usare dropdownMenuOutput ("menu") ''? [Fonte] (https://rstudio.github.io/shinydashboard/structure.html) Inoltre, se controlli la fonte, quella funzione viene chiamata in 'dashboardHeader()', non 'dashboardSidebar()' –

+0

Bene, no, I non usarlo, perché non voglio menu a tendina. Perché? – Servet

+0

Oh wow oops. Scusa, è presto. –

risposta

4

Devi efficacemente utilizzare updateTabItems(). Per fare ciò è necessario impostare un id per lo sidebarMenu e aggiornare il corrispondente menuItem o menuSubItem.

Per il vostro caso specifico si dovrebbe fare qualcosa di simile:

library(shiny) 
library(shinydashboard) 
ui <- dashboardPage(
    dashboardHeader(title = "Dynamic sidebar"), 
    dashboardSidebar(
    sidebarMenu(id="tabs", 
    sidebarMenuOutput("menu") 
    ) 
), 
    dashboardBody(
    tabItems(
     tabItem(tabName = "m1", p("Menu content 1")), 
     tabItem(tabName = "m2", p("Menu content 2")) 
    ) 
) 
) 
server <- function(input, output,session) { 

    output$menu <- renderMenu({ 
    sidebarMenu(
      menuItem("Menu item1", tabName="m1", icon = icon("calendar")), 
      menuItem("Menu item2", tabName="m2", icon = icon("database")) 
      ) 
    }) 
    isolate({updateTabItems(session, "tabs", "m2")}) 
} 
shinyApp(ui, server) 

cura versione per rimuovere il problema indentazione

+0

Funny, l'idea di usare dashboardSidebar() due volte, sia nel server che nel codice ui ... Non ci ho mai pensato. Funziona, ma c'è uno strano problema di indentazione (screenshot postato alla fine del mio post iniziale). Capita anche a te? Non sembra buono come questo – Servet

+0

Trovato una soluzione. Ho modificato la mia risposta. La soluzione era definire l'id della Sidebar nell'interfaccia utente. Spero che sia d'aiuto. – Romain

+0

Aiuta sicuramente. Questa è la soluzione che stavo cercando. Grazie. – Servet

Problemi correlati