在shinyDashboard中的菜单位之间切换

在shinyDashboard中的菜单位之间切换,r,shiny,shinydashboard,R,Shiny,Shinydashboard,我正在尝试使用shinydashboard建立一个闪亮的应用程序,在大多数情况下,祝你好运。然而,我在侧边栏行为方面遇到了一个怪癖,我认为这是可以避免的,但还没有发现如何避免 下面是一个小例子,再现了我的问题。基本上,有两个侧边栏菜单-菜单一和菜单二,每个都有两个菜单位。在菜单项中切换子项可以正常工作。所以,如果我想从子项1切换到子项2,没有问题。我可以整天都这样做 我还可以在菜单中切换到子项,这样就可以从子项一跳到子项三。问题在于试图切换回去。如果选择了subItemOne,并且我尝试转到su

我正在尝试使用shinydashboard建立一个闪亮的应用程序,在大多数情况下,祝你好运。然而,我在侧边栏行为方面遇到了一个怪癖,我认为这是可以避免的,但还没有发现如何避免

下面是一个小例子,再现了我的问题。基本上,有两个侧边栏菜单-菜单一和菜单二,每个都有两个菜单位。在菜单项中切换子项可以正常工作。所以,如果我想从子项1切换到子项2,没有问题。我可以整天都这样做

我还可以在菜单中切换到子项,这样就可以从子项一跳到子项三。问题在于试图切换回去。如果选择了subItemOne,并且我尝试转到subItemThree并返回subItemOne,则无法执行此操作。我必须转到子项2,然后才能打开子项1

有没有办法纠正这个设置,这样我就可以直接从子项一跳到子项三(或二加四),然后再跳回来

library('shiny')
library('shinydashboard')
# Sidebar #############################
sidebar <- dashboardSidebar(
  width = 290,

  sidebarMenu(
    menuItem('Menu One', tabName = 'menuOne', icon = icon('line-chart'), 
        collapsible = 
            menuSubItem('Sub-Item One', tabName = 'subItemOne'),
            menuSubItem('Sub-Item Two', tabName = 'subItemTwo')
            )
  ),

  sidebarMenu(
    menuItem('Menu Two', tabName = 'menuTwo', icon = icon('users'), 
             collapsible = 
               menuSubItem('Sub-Item Three', tabName = 'subItemThree'),
             menuSubItem('Sub-Item Four', tabName = 'subItemFour')
    )
  )

)
# Body #############################
body <- dashboardBody(

  tabItems(
    tabItem(tabName = 'subItemOne',
            h2('Selected Sub-Item One')
    ),
    tabItem(tabName = 'subItemTwo',
            h2('Selected Sub-Item Two')
    ),
    tabItem(tabName = 'subItemThree',
            h2('Selected Sub-Item Three')
    ),
    tabItem(tabName = 'subItemFour',
            h2('Selected Sub-Item Four')
    )
  )
)
# UI #############################
ui <- dashboardPage(
  dashboardHeader(title = 'Test', titleWidth = 290),
  sidebar,
  body
)
# Server #############################
server <- function(input, output){

}

shinyApp(ui, server)
library('shinny')
图书馆(“shinydashboard”)
#边栏#############################

侧栏问题在于选项卡项保持活动状态,单击活动选项卡项不会更新UI。这可以用一些Javascript来修复

library('shiny')
library('shinydashboard')
# Sidebar #############################
sidebar <- dashboardSidebar(
  tags$head(
    tags$script(
      HTML(
        "
        $(document).ready(function(){
          // Bind classes to menu items, easiet to fill in manually
          var ids = ['subItemOne','subItemTwo','subItemThree','subItemFour'];
          for(i=0; i<ids.length; i++){
            $('a[data-value='+ids[i]+']').addClass('my_subitem_class');
          }

          // Register click handeler
          $('.my_subitem_class').on('click',function(){
            // Unactive menuSubItems
            $('.my_subitem_class').parent().removeClass('active');
          })
        })
        "
      )
    )
  ),
  width = 290,

  sidebarMenu(
    menuItem('Menu One', tabName = 'menuOne', icon = icon('line-chart'),
             collapsible = 
               menuSubItem('Sub-Item One', tabName = 'subItemOne'),
             menuSubItem('Sub-Item Two', tabName = 'subItemTwo')
    )
  ),

  sidebarMenu(
    menuItem('Menu Two', tabName = 'menuTwo', icon = icon('users'), 
             collapsible = 
               menuSubItem('Sub-Item Three', tabName = 'subItemThree'),
             menuSubItem('Sub-Item Four', tabName = 'subItemFour')
    )
  )

)
# Body #############################
body <- dashboardBody(

  tabItems(
    tabItem(tabName = 'subItemOne',
            h2('Selected Sub-Item One')
    ),
    tabItem(tabName = 'subItemTwo',
            h2('Selected Sub-Item Two')
    ),
    tabItem(tabName = 'subItemThree',
            h2('Selected Sub-Item Three')
    ),
    tabItem(tabName = 'subItemFour',
            h2('Selected Sub-Item Four')
    )
  )
)
# UI #############################
ui <- dashboardPage(
  dashboardHeader(title = 'Test', titleWidth = 290),
  sidebar,
  body
)
# Server #############################
server <- function(input, output){

}

shinyApp(ui, server)
library('shinny')
图书馆(“shinydashboard”)
#边栏#############################
边栏