shinydashboard侧边栏无法解开多个标签

时间:2016-10-07 15:54:44

标签: shiny shinydashboard

我有一些非常简单的shinydashboard代码:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenu(id='tab1',
      menuItem('tab 1', tabName='tab1',
        menuSubItem('subtab 1', tabName='tab1subtab1'),
        menuSubItem('subtab 2', tabName='tab1subtab2')
      ),
      menuItem('tab 2', tabName='tab2',
        menuSubItem('subtab 1', tabName='tab2subtab1'),
        menuSubItem('subtab 2', tabName='tab2subtab2')
      )
    ),
    tags$head(tags$script(HTML('$(document).ready(function() {$(".treeview-menu").css("display", "block");})')))
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName='tab1subtab1',
        verbatimTextOutput('check11')
      ),
      tabItem(tabName='tab1subtab2',
        verbatimTextOutput('check12')
      ),
      tabItem(tabName='tab2subtab1',
        verbatimTextOutput('check21')
      ),
      tabItem(tabName='tab1subtab1',
        verbatimTextOutput('check22')
      )
    )
  )
)

server <- function(input, output, session) {
  observe(print(input$tab))

  output$check11 <- renderPrint(input$tab)
  output$check12 <- renderPrint(input$tab)
  output$check21 <- renderPrint(input$tab)
  output$check22 <- renderPrint(input$tab)
}

shinyApp(ui, server)

在上面的代码中,有一些HTML可确保在应用启动时tab选项未展开。但是,如果用户折叠其中一个选项卡,然后取消折叠,则另一个选项卡会自动折叠。这意味着侧边栏无法返回到两个标签未被折叠的原始状态。如何解决这个问题?

更新:我已经修改了原始帖子中的代码。此新版本具有observe(print(input$tab))位,可根据选择的选项卡修改输出。以下GyD提供的答案回答了我原来的问题,但它并没有让我保留我需要的observe(print(input$tab))功能。

1 个答案:

答案 0 :(得分:1)

此行为不是由您的js代码引起的,而是$scope.limit={ startIndex :0, itemCount : 10 } $scope.next = function(){ $scope.limit.startIndex += $scope.limit.itemCount; } 的原因。如果选择了选项卡,则另一个选项卡将自动折叠。

虽然我不知道如何通过js或其他东西设置这个,但我想出的最简单的解决方案是使用2 sidebarMenu - s而不是1。

同样,这可能不是你想要的,但它应该解决崩溃的问题。

代码:

sidebarMenu