简体   繁体   English

如何隐藏特定选项卡的 Shiny 应用程序的侧边栏面板

[英]How to hide sidebarPanel of a Shiny app for a particular tab

My Shiny app has a universal sidebarPanel.我的 Shiny 应用程序有一个通用侧边栏面板。 I want to hide it for one particular tab, ie whenever the used would navigate to that tab the sidebarPanel would collapse.我想为一个特定的选项卡隐藏它,即每当用户导航到该选项卡时,sidebarPanel 就会折叠。 The code I am trying is as follows-我正在尝试的代码如下 -

The UI-用户界面-

library(shiny)
shinyUI(fluidPage (
  theme = shinytheme("superhero"),
  headerPanel("COVID-19 Data Visualizer"),
  sidebarPanel(
    width = 2,
    selectInput(
      "countries",
      label = "Select Countries",
      choices =
        c("B", "C", "A"),
      selected = c("A"),
      multiple = T
    ),
    submitButton(text = "View")
  ),
  mainPanel (h1(""),
             tabsetPanel(
               tabPanel(
                 "Global Status",
                 div(id="Main"),
                 plotlyOutput("figG"),
                 br(),
                 plotlyOutput("global_time"),
                 br(),
                 plotlyOutput("global_cfr"),
                 br(),
                 plotlyOutput("global_p"),
                 br(),
                 plotlyOutput("global_recov_dead")
               ),
               tabPanel(
                 "Comparative Charts",
                 plotlyOutput("fig_confirm"),
                 br(),
                 plotlyOutput("fig_dead"),
                 br(),
                 plotlyOutput("fig_recov")
               ),
               tabPanel(
                 "Ratio Analysis",
                 plotlyOutput("fig_confirm_S"),
                 br(),
                 plotlyOutput("fig_confirm_D"),
                 br(),
                 plotlyOutput("fig_Ratio"),
                 br(),
                 plotlyOutput("fig_cfr_print")
               )
             ))
))

The server part-服务器部分-

server <- function(input, output) {
  observeEvent(input$tabs == "Global Status", {
    shinyjs::hide(id = "Main")
  })

}

I don't really want to use the navbarPage and want single sidebarPanel for all the inputs.我真的不想使用 navbarPage 并希望所有输入都使用单个 sidebarPanel。

A screenshot of the output I am getting-我得到的 output 的屏幕截图 - 在此处输入图像描述

Thanks in advance.提前致谢。

Here is an example:这是一个例子:

library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(), 

  sidebarLayout(

    sidebarPanel(
      id="sidebar",
      selectInput(
        "countries", label = "Select Countries",
        choices = c("B", "C", "A"), selected = "A",
        multiple = TRUE
      )
    ),

    mainPanel(
      tabsetPanel(
        tabPanel(
          "Global status",
          sliderInput("s1", "slider 1", 0, 100, 20)
        ),
        tabPanel(
          "Comparative charts",
          sliderInput("s2", "slider 2", 0, 100, 50)
        ),
        tabPanel(
          "Ratio analysis",
          sliderInput("s3", "slider 3", 0, 100, 80)
        ),
        id = "tabset"
      ), 
      id="main"
    )
  )
)

server <- function(input, output){

  observeEvent(input[["tabset"]], {
    if(input[["tabset"]] == "Comparative charts"){
      hideElement(selector = "#sidebar")
      removeCssClass("main", "col-sm-8")
      addCssClass("main", "col-sm-12")
    }else{
      showElement(selector = "#sidebar")
      removeCssClass("main", "col-sm-12")
      addCssClass("main", "col-sm-8")
    }
  })

}

shinyApp(ui = ui, server = server)

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM