2016-04-08 14 views
3

Wie würden Sie eine menuitem in einem Bedingungsfenster so einbinden, dass es wie der Rest der Menüeinträge aussieht?BedingtesPanel um menuItem wird nicht ordnungsgemäß angezeigt

Versuchen Sie eine auf B und sehen, wie die C Menüpunkt Menüpunkte A oder B im Vergleich aussieht -

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(
    sidebarMenu(id = "sidebarmenu", 
     menuItem("A", tabName = "a", icon = icon("group", lib="font-awesome")), 
     menuItem("B", tabName = "b", icon = icon("check-circle", lib = "font-awesome")), 
     conditionalPanel("input.sidebarmenu === 'b'", 
     sliderInput("b", "Under sidebarMenu", 1, 100, 50) 
    ), 
     conditionalPanel("input.sidebarmenu === 'b'", 
     menuItem("C", tabName = "c", icon = icon("check-circle", lib = "font-awesome")) 
    ) 
    ) 
), 
    dashboardBody() 
) 

server <- function(input, output) {} 

shinyApp(ui, server) 

(Der meiste Code entlehnt - https://github.com/rstudio/shinydashboard/issues/28)

Ich möchte die Lösung, um nicht mit dem CSS oder einer anderen Hintergrundeinstellung herumzubasteln.

+0

wickeln Sie es in einem 'sidebarMenu()'? – tospig

+0

'sidebarMenu (conditionalPanel (" input.sidebarmenu === 'b' ", Menüelement (" C ", TabName =" c ", Symbol = Symbol (" check-circle ", lib =" font-awesome ")) )) '? Funktioniert nicht. – TheComeOnMan

+0

Sorry, ich meinte nur das 'menuItem()' - 'sidebarMenu (menuItem (...))' – tospig

Antwort

1

Die Lösung, die die menuItem in einem sidebarMenu() wieder

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(
    sidebarMenu(id = "sidebarmenu", 
       menuItem("A", tabName = "a", icon = icon("group", lib="font-awesome")), 
       menuItem("B", tabName = "b", icon = icon("check-circle", lib = "font-awesome")), 
       conditionalPanel("input.sidebarmenu === 'b'", 
           sliderInput("b", "Under sidebarMenu", 1, 100, 50) 
       ), 
       conditionalPanel("input.sidebarmenu === 'b'", 
           sidebarMenu(menuItem("C", tabName = "c", icon = icon("check-circle", lib = "font-awesome"))) 
       ) 
    ) 
), 
    dashboardBody() 
) 

server <- function(input, output) {} 

shinyApp(ui, server) 

jedoch zu wickeln funktioniert, ist, nach einem wenig Forschung tun, ich nicht warum dies notwendig zu sehen ist (ist mich gefragt, ob es in engen Zusammenhang steht this issue in irgendeiner Weise?

Wenn jemand eine detaillierte Erklärung habe ich es in der Lösung von @tospi Eigentlich

+0

Ich nehme an, dass 'conditionalPanel' berechnet wird, nachdem alles angezeigt wird. Daher fehlen dem 'menuItem' einige CSS-Tags. 'sidebarMenu' fügt diese zusätzlichen Tags dem' menuItem' Element hinzu und es wird ok. – wikiselev

0

:) zu hören wäre dankbar, g, die Hervorhebung des aktiven Menüpunktes funktioniert nicht gut. Ich fand das funktioniert ohne Probleme:

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(
    conditionalPanel("input.sidebarmenu == 'b'", 
     sidebarMenu(id = "sidebarmenu", 
      menuItem("A", tabName = "a", icon = icon("group", lib="font-awesome")), 
      menuItem("B", tabName = "b", icon = icon("check-circle", lib = "font-awesome")), 
      sliderInput("b", "Under sidebarMenu", 1, 100, 50) 
      menuItem("C", tabName = "c", icon = icon("check-circle", lib = "font-awesome")) 
     ) 
    ), 
    conditionalPanel("input.sidebarmenu != 'b'", 
     sidebarMenu(id = "sidebarmenu", 
      menuItem("A", tabName = "a", icon = icon("group", lib="font-awesome")), 
      menuItem("B", tabName = "b", icon = icon("check-circle", lib = "font-awesome")) 
     ) 
    ) 
), 
    dashboardBody() 
) 

server <- function(input, output) {} 

shinyApp(ui, server)