r语言 - 当选择不同的表项时,闪亮的仪表板侧边栏改变



我有以下问题:

我想在tabItem(s)之间切换时改变侧边栏。

dashboardPage(
dasboardHeader(title = ""),
dashboardSidebar(
  sidebarMenu(
    menuItem("1", tabName = "1"),
    menuItem("2", tabName = "2")     
             ),
#I want this to be displayed when menuItem "1" is clicked
      tabsetPanel(
            tabPanel("t1", val="t1",
                    .... some inputs),
            tabPanel("t2", val="t2",
                    .... some inputs)
                 ),
 # This to be displayed when menuItem "2" is clicked    
      selectInput("s1", label="Select"....),
      selectInput("s2", label="Select2"...)
  )
dashboardBody(
 tabItem(tabName="1", 
      .......
   ),
 tabItem(tabName="2",
      ........
   )
 )
)

我有dashboardBody改变时,切换选项卡之间,但不知道如何改变dashboardSidebar值。在dashboardSidebar中尝试过:

 conditionalPanel(
             condition="tabName='1'",
          #displaying first version of DashboardSidebar
             ),
 conditionalPanel(
             condition="tabName='2'",
          #displaying second version of DashboardSidebar
             )

但这对我不起作用。

任何想法?

谢谢你的帮助。

首先,您必须添加sidebarMenu一个ID,该ID将用于Shiny输入值,并且它将报告哪个选项卡被选中。

之后将uiOutput添加到dashboardSidebar功能中。

uiOutput将根据所选选项卡接收tabsetPanel或两个selectInput s。

最后,在服务器端定义的renderUI中,只需要创建条件语句。这是简单的部分。

棘手的部分是您必须将selectInput打包到一个列表中—否则只有第二个小部件将被发送到UI。更棘手的部分是,当您希望通过renderUItabsetPanel发送到UI时,您必须指定ID。(这是非常棘手的,因为通常你不需要指定它的ID !)


完整例子:

library(shiny)
library(shinydashboard)
rm(ui)
rm(server)
ui <- dashboardPage(
    dashboardHeader(title = ""),
    dashboardSidebar(
    # added ID which will be used for a Shiny input value,
    # and it will report which tab is selected.
    sidebarMenu(id = "tab", 
      menuItem("1", tabName = "1"),
      menuItem("2", tabName = "2")
    ),
    uiOutput("out1")
    ),
    dashboardBody(
      tabItem(tabName = "1"),
      tabItem(tabName = "2")
    )
)
server <- function(input, output) {

  output$out1 <- renderUI({
    if (input$tab == "1") {
      dyn_ui <- tabsetPanel(id = "tabset_id", selected = "t1", 
                            tabPanel("t1", value = "t1"),
                            tabPanel("t2", value = "t2"))
    } 
    if (input$tab == "2") {
      dyn_ui <- list(selectInput("s1", label = "Select", choices = letters[1:3]),
                     selectInput("s2", label = "Select2", choices = letters[4:6]))
    }
    return(dyn_ui)
  })
}
shinyApp(ui, server)

最新更新