【问题标题】:shinydashboard: switch tab if sidebar item expandsshinydashboard:如果侧边栏项目展开,则切换选项卡
【发布时间】:2020-09-12 19:29:08
【问题描述】:

我正在开发一个闪亮的仪表板,它有一个带有多个菜单项的侧边栏。其中一项是可扩展的。如果单击菜单项,我想切换选项卡。这对于不可扩展的菜单项非常有效,但是对于可扩展的菜单项,我遇到了一些麻烦。

一种解决方法是在展开菜单中放置一个操作链接并观察它。但我想做的是在展开折叠菜单后立即切换选项卡。我尝试使用input$sidebarItemExpandshinydashboard::updateTabItem,但不知何故什么也没发生……如果有人知道出了什么问题,请告诉我

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#   UI ====
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

header <- shinydashboard::dashboardHeader()

sidebar <- shinydashboard::dashboardSidebar(
    shinydashboard::sidebarMenu(
        id="tabs",
        shinydashboard::menuItem(
            text="menu_expand",
            tabName="tab1",
            shiny::selectInput(
                inputId="sel_123",
                label="123",
                choices=c("A","B","C"),
                selected="A")),
        shinydashboard::menuItem(
            text="menu_item_normal1",
            tabName="tab2"),
        shinydashboard::menuItem(
            text="menu_item_normal2",
            tabName="tab3")))

body <- shinydashboard::dashboardBody(
    shinydashboard::tabItems(
        shinydashboard::tabItem(
            tabName = "tab1",
            shiny::h3("Tab 1")
        ),
        shinydashboard::tabItem(
            tabName = "tab2",
            shiny::h3("Tab 2")
        ),
        shinydashboard::tabItem(
            tabName = "tab3",
            shiny::h3("Tab 3"))))

ui <- shinydashboard::dashboardPage(header,sidebar,body)

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#   SERVER ====
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

server <- function(input,output,session){
    shiny::observeEvent(input$sidebarItemExpanded, {
        print(input$sidebarItemExpanded)
        if(input$sidebarItemExpanded == "menu_expand"){
            print("expanded")
            shinydashboard::updateTabItems(
                session=session,"tabs","tab1"
            )
        }
    })
}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#   LAUNCH APP ====
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

shiny::shinyApp(ui,server)

【问题讨论】:

    标签: r shiny shinydashboard


    【解决方案1】:

    您需要将menutitemtabName tab1 放在展开菜单内的一层,因为您也可以在其中有多个选项卡和子菜单项。试试这个代码。

    sidebar <- shinydashboard::dashboardSidebar(
      shinydashboard::sidebarMenu(
        id="tabs",
        shinydashboard::menuItem(text="menu_expand", icon = icon("bar-chart-o"),
                                  menuItem("menu_expanded", tabName = "tab1", icon = icon("bar-chart-o")),
          # text="menu_expand",
          # tabName="tab1",
          shiny::selectInput(
            inputId="sel_123",
            label="123",
            choices=c("A","B","C"),
            selected="A")),
        shinydashboard::menuItem(
          text="menu_item_normal1",
          tabName="tab2"),
        shinydashboard::menuItem(
          text="menu_item_normal2",
          tabName="tab3")))
    

    【讨论】:

    • 就像一个魅力。出于美学原因,我将主菜单中的文本和图标设置为空白,但除此之外,您的解决方案正是我想要的。 (我学会了接受,闪亮的逻辑有时会让我感到困惑:D)
    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2020-06-30
    • 1970-01-01
    • 2020-08-01
    • 2021-09-28
    相关资源
    最近更新 更多