如何将顶部导航(导航页面)和侧边栏菜单(侧边栏菜单)结合在一起侧边、菜单、如何将、页面

2023-09-03 14:02:24 作者:厌心

我有一个闪亮的应用程序(使用NavbarPage),具有许多选项卡,并希望添加一个侧栏菜单,无论选择哪个选项卡都可以看到。侧边栏中的输入值对所有选项卡的内容都有影响。 此外,应该可以隐藏侧边栏菜单,就像它在ShinyDashboard中一样。

我看到两种可能的方式:

Webjx收集基于CSS JS设计50款优秀的导航菜单

(A)使用shinydashboard并以某种方式添加顶部导航栏或

(B)使用NavbarPage并以某种方式添加可隐藏的工具栏菜单。

(A)使用shinydashboard,最接近我想要的是(简化MWE):

library("shiny")
library("shinydashboard")

cases <- list(A=seq(50,500, length.out=10), B=seq(1000,10000, length.out=10))

ui <- dashboardPage(
  dashboardHeader(title = "dash w/ navbarMenu"),
  dashboardSidebar(selectizeInput('case', 'Pick a case', selected="A", choices = c("A", "B"), multiple = FALSE), numericInput('num', 'Number', min = 1, max = 10, value = 1, step = 1)),
  dashboardBody(
    tabsetPanel(
      tabPanel(h4("Perspective 1"),
               tabsetPanel(
                 tabPanel("Subtab 1.1", plotOutput("plot11")),
                 tabPanel("Subtab 1.2")
               )),
      tabPanel(h4("Perspective 2"),
               tabsetPanel(
                 tabPanel("Subtab 2.1"),
                 tabPanel("Subtab 2.2")
               ))
    )
  )
)

server <- function(input, output) {
  output$plot11 <- renderPlot({
    hist(rnorm(cases[[input$case]][input$num]))
  })
}

shinyApp(ui, server)

这很难看,因为导航栏菜单是选项卡集,不是菜单的一部分。我想要的是:

基于此post,我猜根本不可能在顶部菜单中包含"透视图1"和"透视图2"标签,因此使用shinydashboard似乎不可行。

(B)使用navbarPage,我尝试使用navlistPanel(),但未成功

(1)使其行为类似于侧边栏菜单,即在页面左侧总体可见

(2)添加隐藏功能。以下是我的尝试:

library("shiny")

cases <- list(A=seq(50,500, length.out=10),
              B=seq(1000,10000, length.out=10))

ui <- navbarPage(title = "nav w/ sidebarMenu",
                   tabPanel(h4("Perspective 1"),
                            tabsetPanel(
                              tabPanel("Subtab 1.1",
                                       plotOutput("plot11")),
                              tabPanel("Subtab 1.2")
                            )),
                   tabPanel(h4("Perspective 2"),
                            tabsetPanel(
                              tabPanel("Subtab 2.1"),
                              tabPanel("Subtab 2.2")
                            )),

                 navlistPanel(widths = c(2, 2), "SidebarMenu",
                              tabPanel(selectizeInput('case', 'Pick a case', selected="A", choices = c("A", "B"), multiple = FALSE)),
                              tabPanel(numericInput('num', 'Number', min = 1, max = 10, value = 1, step = 1))
                 )
)


server <- function(input, output) {
  output$plot11 <- renderPlot({
    hist(rnorm(cases[[input$case]][input$num]))
  })
}

shinyApp(ui, server)

同样,我想要的是:

我知道,有flexDashboard。它不能解决问题有三个原因:

(1)我认为无法隐藏侧边栏菜单,因为它是一列,而不是真正的侧边栏菜单,

(2)我在我的应用程序中要求它不是被动的,

(3)我认为数据表不工作,这也是我需要的。

此外,我不希望将代码更改为Rmarkdown语法。

我最好使用一个导航页面并添加一个侧栏菜单,因为我的应用程序已经是使用导航页面构建的。

推荐答案

现在有了一种更简单、更优雅的方法来实现它:

shinydashboardPlus

和here以查看实际操作。