shinydashboard 可以使用 Tabpanels 并有导航栏吗?

问题描述 投票:0回答:3

我目前正在使用shinydashboard,但我希望有与主体中的内容相关联的不同的侧边栏菜单。闪亮的仪表板可以做到这一点吗?

例如:

我想要这样的东西 https://gallery.shinyapps.io/CDCPlot/

查看当您单击导航栏选项时,侧边栏菜单以及正文如何变化。

这在shinydashboad 中可能吗?我喜欢闪亮仪表板的外观和感觉,并且不想再回到闪亮的。

底层代码在这里:https://github.com/NLMichaud/WeeklyCDCPlot/blob/master/ui.R

并使用选项卡面板和导航栏。 Shinydashboard中有类似的东西吗?

有代码示例吗?

谢谢!

r shiny shinydashboard
3个回答
3
投票

您要问的问题很棘手,可能不可能,因为在闪亮的仪表板中,顶级导航控件位于仪表板侧边栏(左侧)内,内容包含在仪表板主体(右侧)内。如果您将 navMenu 放置在仪表板主体内,则它必须属于特定的侧边栏项目,并且如果您稍后单击另一个侧边栏项目,它将消失。

您可能需要改变实现这一目标的方式。根据您想做什么,您可以尝试:

创建一个仪表板侧边栏,其中包含通常位于顶部菜单中的菜单项,您可以将该菜单的所有控件放置在关联的 tabItem 下。您甚至可以通过在 server.R 中使用

renderMenu()
使其全部动态化:

output$menu <- renderMenu({
   sidebarMenu(id = "sidebMenu",
       menuItem("Load Data", tabName = "loadData", icon = icon("database"),
          actionButton("press", "Press me")
   )
})

这样做的缺点可能是,您可以在侧边栏菜单中放入的控件数量有限,但它看起来仍然不错。但这就是仪表板的制作方式。

使用不带侧边栏的全屏仪表板和

dashboardSidebar(disable = TRUE)
,并以与您提到的示例类似的方式使用导航菜单。您将没有闪亮仪表板的侧边栏,并且您必须像示例中一样制作自己的侧边栏。这样,您可能仍然喜欢shinydashboard提供的其他功能,如通知、框、皮肤、状态框等。但这只是一个建议,这取决于您。

希望这有帮助。


0
投票

闪亮仪表板的问题是,默认情况下,它不允许标题上有导航栏,这就是我假设的你所要求的。基本上是这样,因为使用 HTML、CSS 和 JS 进行响应式设计的 Bootstrap 框架不包含该选项。因此,如果您在互联网上搜索,有多种方法可以做到这一点。但它们都有一个共同点:逻辑。您需要修改 HTML 以包含您正在查找的选项:

  1. 创建一个 HTML 对象,该对象是文档标题中的导航栏面板。
  2. 在 HTML 对象中创建元素(导航面板)并为其指定 id。
  3. 创建与导航面板的 id 相对应的按钮。

为了能够浏览不同的面板,其逻辑与标准的闪亮仪表板有点不同。

  1. 在 HTML 上创建一个响应式表达式,用于注册按钮上的点击并分配您想要的值(例如,类似 clickedTab() 的内容)。最合乎逻辑的是分配您之前分配的导航面板的值。
  2. 在你闪亮的服务器中调用这个反应元素。
  3. 根据您所在的选项卡,使用 uiOutput() 运行您想要的服务器代码部分。 为此,您需要创建一个响应式对象(即 ObserveEvent()),该对象在您单击选项卡时注册,然后在 if{} 语句中运行部分代码,其中条件是 clickedTAb() == "tabid"。

-1
投票

也许你想要类似的东西:

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)

ui <- fluidPage( 
  navbarPage(title = "AA Tester", 
             windowTitle ="AA Tester", 
             id="tabactive", 
             tabPanel("Explore Funds", icon = icon("table"),
                      tags$body(
                        class="skin-blue sidebar-mini control-sidebar-open",
                        dashboardPagePlus(
                          sidebar_fullCollapse=TRUE,
                          dashboardHeaderPlus(
                            disable = T,
                            enable_rightsidebar = TRUE,
                            rightSidebarIcon = "gears"),
                          dashboardSidebar(),
                          dashboardBody(),
                          rightsidebar = rightSidebar(
                            background = "dark",
                            rightSidebarTabContent(
                              id = 1,
                              title = "Controllers",
                              icon = "desktop",
                              active = TRUE
                            ))
                        ))
                      ),
             tabPanel("Holdings Analysis",icon = icon("line-chart"))
             )
  )

server <- function(input, output, session) {}

shinyApp(ui = ui, server = server)  
© www.soinside.com 2019 - 2024. All rights reserved.