2016-04-20 4 views
5

Ich habe dynamische sibebar Menüs in R Shinydashboard erstellt. Obwohl ich selected = TRUE verwende, wird beim Start in diesem dynamischen Modus kein Menüelement ausgewählt, das einem Menü zugeordnet ist.R Shinydashboard dynamische Menüauswahl

Wie kann ich sicherstellen, dass ich Kontrolle darüber habe, welcher Inhalt des MenuItem beim Start in diesem dynamischen Modus angezeigt wird?

Ich habe überall durch ähnliche Beiträge gesucht. Konnte nichts finden, was bisher funktioniert hat. updateTabItems() schien nicht zu funktionieren.

Irgendwelche Ideen? danke aus dem vorsprung.

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: Einrückungen Problem, das hsh

+0

Sie 'dropdownMenuOutput ("Menü")' zu entfernen? [Quelle] (https://rstudio.github.io/shinydashboard/structure.html) Auch wenn Sie die Quelle überprüfen, wird diese Funktion in 'dashboardHeader()' aufgerufen, nicht 'dashboardSidebar()' –

+0

Nun, nein, ich benutze es nicht, weil ich keine Dropdown-Menüs möchte. Warum? – Servet

+0

Oh wow oops. Entschuldigung, es ist früh. –

Antwort

4

Sie haben effektiv mit Romain anwser tritt updateTabItems() zu verwenden. Um dies zu tun, müssen Sie eine ID für die sidebarMenu einrichten und die entsprechenden menuItem oder menuSubItem aktualisieren.

Für Ihre speziellen Fall sollten Sie etwas tun:

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) 

Edited Version verwenden müssen Sie die Vertiefung Problem

+0

Lustig, die Idee zweimal mit DashboardSideBar(), sowohl in Server-und UI-Code .... Niemals daran gedacht. Es funktioniert, aber es gibt ein seltsames Einrückungsproblem (Posted Screenshot am Ende meiner ursprünglichen Post). Kommt es dir auch vor? Sieht nicht so gut aus. – Servet

+0

Eine Lösung gefunden. Ich habe meine Antwort bearbeitet. Die Lösung bestand darin, die ID der Sidebar in der Benutzeroberfläche zu definieren. Ich hoffe es hilft. – Romain

+0

Es hilft definitiv. Das ist die Lösung, nach der ich gesucht habe. Vielen Dank. – Servet