You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在bslib的page_navbar中添加右侧嵌套侧边栏

如何在bslib的page_navbar中添加右侧嵌套侧边栏

嘿,我懂你现在的需求——想用page_navbar的时候,同时保留左侧的默认展开侧边栏,再加一个默认闭合的右侧侧边栏对吧?你之前嵌套layout_sidebar的思路方向是对的,但没找对嵌套的位置,所以没达到预期效果。我给你捋清楚正确的做法,分两种常见场景给你代码示例:

场景1:每个导航页配独立的右侧侧边栏

如果不同的导航标签页需要不一样的右侧侧边栏内容,那你要把每个nav_panel的具体内容用layout_sidebar包裹,在这个布局里定义右侧侧边栏:

library(bslib)
library(shiny)

id <- "hi"
ns <- NS(id)

ui <- page_navbar(
  id = ns("navbar"),
  title = "Example App",
  # 原来的左侧全局侧边栏
  sidebar = sidebar(
    id = ns("sidebar"),
    open = "open",
    "左侧侧边栏内容"
  ),
  # Overview页面,带专属右侧侧边栏
  nav_panel(
    title = "Overview",
    layout_sidebar(
      # 页面的主内容区
      h1("Overview"),
      # 右侧侧边栏:设置position为right,open设为FALSE默认闭合
      sidebar = sidebar(
        "右侧侧边栏(Overview页)",
        position = "right",
        open = FALSE,
        id = ns("right_sidebar_overview")
      )
    )
  ),
  # Table页面,同样配置右侧侧边栏
  nav_panel(
    title = "Table",
    layout_sidebar(
      h1("Table"),
      sidebar = sidebar(
        "右侧侧边栏(Table页)",
        position = "right",
        open = FALSE,
        id = ns("right_sidebar_table")
      )
    )
  )
)

shinyApp(ui, server = function(input, output) {})

场景2:全局统一的右侧侧边栏

如果所有导航页都共用同一个右侧侧边栏,那可以用page_navbar的main参数,把全局布局(包含右侧侧边栏)和所有导航内容整合在一起:

library(bslib)
library(shiny)

id <- "hi"
ns <- NS(id)

ui <- page_navbar(
  id = ns("navbar"),
  title = "Example App",
  # 左侧全局侧边栏
  sidebar = sidebar(
    id = ns("sidebar"),
    open = "open",
    "左侧侧边栏内容"
  ),
  # 全局主布局:把右侧侧边栏和所有导航页都包进来
  main = layout_sidebar(
    # 全局右侧侧边栏,默认闭合
    sidebar = sidebar(
      "全局右侧侧边栏",
      position = "right",
      open = FALSE,
      id = ns("right_sidebar_global")
    ),
    # 用navset_card_tab来承载所有导航页,和page_navbar的导航逻辑匹配
    navset_card_tab(
      nav_panel("Overview", h1("Overview")),
      nav_panel("Table", h1("Table"))
    )
  )
)

shinyApp(ui, server = function(input, output) {})

为啥你之前的尝试没成功?

你之前直接把layout_sidebar嵌套在page_navbar的顶层了,但page_navbar的顶层只接受导航相关的元素(比如nav_panel、sidebar这类参数),布局组件得放在导航面板内部或者main参数里,不能直接当顶层子元素,这就是问题所在~

备注:内容来源于stack exchange,提问作者Julian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 07:18:13