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

Shinydashboard应用添加多标签页并在首个标签页内嵌select-input后内容不显示的问题求助

解决Shinydashboard标签页内容不显示的问题

我看了你的代码,问题主要出在侧边栏菜单的结构错误和样式标签的放置位置不对这两个地方,下面给你拆解问题并给出修复后的代码:

问题分析

  • 侧边栏嵌套错误:你把selectInput直接嵌套在menuItem里作为子项,但shinydashboard的menuItem子元素应该用menuSubItem定义菜单选项,而非直接放置输入控件。这种错误嵌套会干扰标签页的激活逻辑,也不符合组件使用规范。
  • 样式标签位置错误:你把tags$head放在了第一个tabItem的fluidRow内部,这会破坏标签页内容的DOM结构,导致页面无法正确渲染内容。样式标签应该放在整个dashboardPage的外部,确保全局生效。

修复后的代码

# 先把全局样式放在最外层,确保正确加载
tags$head(tags$style(HTML('
  /* 设置内容区域背景色 */
  .content-wrapper, .right-side { 
    background-color: #FFFFFF; 
  }
')))

ui <- dashboardPage(
  dashboardHeader(title = "HAMAG BICRO: 2016 - 2022"),
  dashboardSidebar(
    # 将selectInput放在侧边栏顶层,与sidebarMenu同级,保留原有的常驻逻辑
    selectInput("instrumenti", "Instrumenti", choices = Instrumenti),
    sidebarMenu(
      menuItem("Geo prikaz", tabName = "Geografski prikaz"),
      menuItem("Vremenski prikaz", tabName = "Vremenski prikaz")
    )
  ),
  dashboardBody(
    tabItems(
      # 第一个标签页内容
      tabItem(
        tabName = "Geografski prikaz",
        fluidRow(
          box(
            width=12, 
            title = "Geografski prikaz ulaganja", 
            leafletOutput("mymap", height=550)
          )
        ),
        fluidRow(
          box(
            title ="Odnos ulaganja i stanovništva", 
            plotlyOutput("scatter", width=4, height=220)
          ),
          box(
            title ="Ulaganje po stanovniku", 
            plotlyOutput("bar", width=6, height=250)
          )
        )
      ),
      # 第二个标签页内容
      tabItem(
        tabName = "Vremenski prikaz",
        h2("napuniti")
      )
    )
  )
)

额外说明

如果你确实需要把selectInput作为某个菜单的折叠子项(点击菜单才显示),可以用menuSubItem配合conditionalPanel实现,但根据你原有的无标签页逻辑,将控件放在侧边栏顶层更符合你的需求。另外要确保menuItem和tabItem的tabName完全匹配(大小写、空格都要一致),这是标签页切换生效的关键。

内容的提问来源于stack exchange,提问作者kosk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:52:28