【问题标题】:Add conditionalPanel to multiple navbarMenus in shiny将conditionalPanel添加到闪亮的多个navbarMenus
【发布时间】:2018-03-09 06:36:56
【问题描述】:

我创建了一个具有多个navbarMenustabPanels 的闪亮应用程序。每个navBarMenu 都有单独的conditionalPanels。当我在下面的代码 sn-p 中添加第二个 navBarMenu 时,conditionalPanel 似乎不适用于 tabPanels,因为所有输入都出现在所有 tabPanels 上。不知道我做错了什么。

  ui <- shinyUI(tagList(
  shinythemes::themeSelector(),
  tags$head(
    tags$style(HTML("
                    .shiny-output-error-validation {
                    color: green;
                    }
                    "))
    ),
  navbarPage(title = "Test App",
             navbarMenu("nav bar 1", icon = icon("line-chart"),
                        "menu 1",
                        "--------",
                        tabPanel("Tab1", 
                                 tabPanel("panel 1", icon = icon("line-chart"),
                                          pageWithSidebar(
                                            headerPanel(""),
                                            sidebarPanel(tags$head(
                                              tags$style(type="text/css", "select { max-width: 400px; }"),
                                              tags$style(type="text/css", ".span4 { max-width: 400px; }"),
                                              tags$style(type="text/css", ".well { max-width: 400px; }"),
                                              tags$style(type="text/css", '#leftPanel { width:200px; float:left;}')
                                            ),
                                            conditionalPanel(condition="input.conditionedPanels==1",
                                                             dateRangeInput("daterange1", "Select Date Range:", start = "2017-01-01", end = Sys.Date(), width = "100%")
                                            ),
                                            conditionalPanel(condition="input.conditionedPanels==2",
                                                               dateRangeInput("daterange2", "Select Date Range:", start = "2017-01-01", end = Sys.Date(), width = "100%"),
                                                               selectInput("inputw1", "Select cols:", choices = c("col1","col2","col3"), selected = "col1", multiple = FALSE, width = "100%")
                                            ),
                                            conditionalPanel(condition="input.conditionedPanels==3"
                                            )
                                            ),
                                            mainPanel(
                                              tabsetPanel(id = "conditionedPanels",
                                                          tabPanel("tab 1", value = 1, icon = icon("table"), 
                                                                   br(),
                                                                   h3("Data Table")
                                                          ),
                                                          tabPanel("tab 2", value=2, icon = icon("line-chart"),
                                                                   column(width = 5, leafletOutput("map1")
                                                                   )
                                                          ),
                                                          tabPanel("tab 3", value=3 , icon = icon("table"),
                                                                   tinyMCE('editor1', 'Click to edit text')
                                                          )
                                              )
                                            )
                                          )
                                 )
                        )

             ),

             navbarMenu("nav bar 2", icon = icon("line-chart"),
                        "menu 1",
                        "--------",
                        tabPanel("Tab1", 
                                 tabPanel("panel 2", icon = icon("line-chart"),
                                          pageWithSidebar(
                                            headerPanel(""),
                                            sidebarPanel(tags$head(
                                              tags$style(type="text/css", "select { max-width: 400px; }"),
                                              tags$style(type="text/css", ".span4 { max-width: 400px; }"),
                                              tags$style(type="text/css", ".well { max-width: 400px; }"),
                                              tags$style(type="text/css", '#leftPanel { width:200px; float:left;}')
                                            ),
                                            conditionalPanel(condition="input.conditionedPanels==4",
                                                             dateRangeInput("daterange3", "Select Date Range:", start = "2014-01-01", end = Sys.Date(), width = "100%")
                                            ),
                                            conditionalPanel(condition="input.conditionedPanels==5",
                                                             dateRangeInput("daterange4", "Select Date Range:", start = "2014-01-01", end = Sys.Date(), width = "100%"),
                                                             selectInput("inputw2", "Select cols:", choices = c("col4","col5","col6"), selected = "col1", multiple = FALSE, width = "100%")
                                            ),
                                            conditionalPanel(condition="input.conditionedPanels==6"
                                            )
                                            ),
                                            mainPanel(
                                              tabsetPanel(id = "conditionedPanels",
                                                          tabPanel("tab 1", value = 4, icon = icon("table"), 
                                                                   br(),
                                                                   h3("Data Table")
                                                          ),
                                                          tabPanel("tab 2", value=5, icon = icon("line-chart"),
                                                                   column(width = 5, leafletOutput("map1")
                                                                   )
                                                          ),
                                                          tabPanel("tab 3", value=6 , icon = icon("table"),
                                                                   tinyMCE('editor2', 'Click to edit text')
                                                          )
                                              )
                                            )
                                          )
                                 )
                        )

             )



  )

    )
)

  server <- function(input, output, session){
  }
  shinyApp(ui, server)

感谢您在修复代码方面获得的任何帮助。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    这个问题不是因为第二个navBarMenu,而是因为您在两个选项卡中有两个同名的输出元素,即leafletOutput("map1")不允许为两个输出元素指定相同的名称。

    因此,将leafletOutput("map1") 更改为leafletOutput("map2") 第二个tabsetPanel 可以解决您报告的问题。

    修复此问题后您将遇到的第二个问题是您的两个tabsetPanel 具有相同的 id,即conditionedPanels,这将导致只有您的第一个tabsetPanel 才能使您的conditionalPanel 正常工作。要解决此问题,您必须更改您的 tabsetPanel 的 ID。

    我已更改代码中leafletOutputtabsetPanel id 的值以获得所需的输出。

    library(shiny)
    library(leaflet)
    library(shinyMCE)
    
       ui <- shinyUI(tagList(
         shinythemes::themeSelector(),
         tags$head(
           tags$style(HTML("
                           .shiny-output-error-validation {
                           color: green;
                           }
                           "))
         ),
         navbarPage(title = "Test App",
                    navbarMenu("nav bar 1", icon = icon("line-chart"),
                               "menu 1",
                               "--------",
                               tabPanel("Tab1", 
                                        tabPanel("panel 1", icon = icon("line-chart"),
                                                 pageWithSidebar(
                                                   headerPanel(""),
                                                   sidebarPanel(tags$head(
                                                     tags$style(type="text/css", "select { max-width: 400px; }"),
                                                     tags$style(type="text/css", ".span4 { max-width: 400px; }"),
                                                     tags$style(type="text/css", ".well { max-width: 400px; }"),
                                                     tags$style(type="text/css", '#leftPanel { width:200px; float:left;}')
                                                   ),
                                                   conditionalPanel(condition="input.conditionedPanels==1",
                                                                    dateRangeInput("daterange1", "Select Date Range:", start = "2017-01-01", end = Sys.Date(), width = "100%")
                                                   ),
                                                   conditionalPanel(condition="input.conditionedPanels==2",
                                                                    dateRangeInput("daterange2", "Select Date Range:", start = "2017-01-01", end = Sys.Date(), width = "100%"),
                                                                    selectInput("inputw1", "Select cols:", choices = c("col1","col2","col3"), selected = "col1", multiple = FALSE, width = "100%")
                                                   ),
                                                   conditionalPanel(condition="input.conditionedPanels==3"
                                                   )
                                                   ),
                                                   mainPanel(
                                                     tabsetPanel(id = "conditionedPanels",
                                                                 tabPanel("tab 1", value = 1, icon = icon("table"), 
                                                                          br(),
                                                                          h3("Data Table")
                                                                 ),
                                                                 tabPanel("tab 2", value=2, icon = icon("line-chart"),
                                                                          column(width = 5, leafletOutput("map1")
                                                                          )
                                                                 ),
                                                                 tabPanel("tab 3", value=3 , icon = icon("table"),
                                                                          tinyMCE('editor1', 'Click to edit text')
                                                                 )
                                                     )
                                                   )
                                                 )
                                        )
                               )
    
                    ),
    
                    navbarMenu("nav bar 2", icon = icon("line-chart"),
                               "menu 1",
                               "--------",
                               tabPanel("Tab1", 
                                        tabPanel("panel 2", icon = icon("line-chart"),
                                                 pageWithSidebar(
                                                   headerPanel(""),
                                                   sidebarPanel(tags$head(
                                                     tags$style(type="text/css", "select { max-width: 400px; }"),
                                                     tags$style(type="text/css", ".span4 { max-width: 400px; }"),
                                                     tags$style(type="text/css", ".well { max-width: 400px; }"),
                                                     tags$style(type="text/css", '#leftPanel { width:200px; float:left;}')
                                                   ),
                                                   conditionalPanel(condition="input.conditionedPanels1==4",
                                                                    dateRangeInput("daterange3", "Select Date Range:", start = "2014-01-01", end = Sys.Date(), width = "100%")
                                                   ),
                                                   conditionalPanel(condition="input.conditionedPanels1==5",
                                                                    dateRangeInput("daterange4", "Select Date Range:", start = "2014-01-01", end = Sys.Date(), width = "100%"),
                                                                    selectInput("inputw2", "Select cols:", choices = c("col4","col5","col6"), selected = "col1", multiple = FALSE, width = "100%")
                                                   ),
                                                   conditionalPanel(condition="input.conditionedPanels1==6"
                                                   )
                                                   ),
                                                   mainPanel(
                                                     tabsetPanel(id = "conditionedPanels1",
                                                                 tabPanel("tab 1", value = 4, icon = icon("table"), 
                                                                          br(),
                                                                          h3("Data Table")
                                                                 ),
                                                                 tabPanel("tab 2", value=5, icon = icon("line-chart"),
                                                                          column(width = 5, leafletOutput("map2")
                                                                          )
                                                                 ),
                                                                 tabPanel("tab 3", value=6 , icon = icon("table"),
                                                                          tinyMCE('editor2', 'Click to edit text')
                                                                 )
                                                     )
                                                   )
                                                 )
                                        )
                               )
    
                    )
    
    
    
         )
    
       )
       )
    
       server <- function(input, output, session){   }
    
       shinyApp(ui, server)
    

    希望对您有所帮助!

    【讨论】:

    • 感谢@SBista!这解决了这个问题。下次我需要彻底检查我的代码。我会接受你的回答
    • 我注意到侧边栏面板和主面板之间的空白。你知道如何摆脱它吗?我试过没有运气。再次感谢您对上一个解决方案的帮助。
    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 2013-11-12
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2021-11-17
    相关资源
    最近更新 更多