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

如何根据选中的tabPanel动态修改shinydashboard的两侧侧边栏内容

实现方案

核心实现逻辑如下:

  • 给tabsetPanel设置唯一id,服务端可实时捕获当前选中的tab页
  • 左侧边栏、右侧控制栏的可变内容使用uiOutput动态渲染,根据当前tab值返回对应组件

修改后的完整可运行代码:

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

shinyApp(
  ui = tags$body(class="skin-blue sidebar-mini control-sidebar-open",dashboardPage(
    options = list(sidebarExpandOnHover = TRUE),
    header = dashboardHeader(title = "Investment Advisor Monitoring - Insider Trading",titleWidth = 450),
    
    sidebar = dashboardSidebar(minified = F, collapsed = F,
                               h4("Investment Selected"),
                               # 动态渲染侧边栏内容
                               uiOutput("sidebar_content")
    ),
    body = dashboardBody(
      h3('Results'),
      # 给tabsetPanel加id,用于监听选中状态
      tabsetPanel(id = "main_tab",
        tabPanel("Insider Training"),
        tabPanel("Switching"),
        tabPanel("Tax Loss Harvesting")
      )
    ),
    controlbar = dashboardControlbar(width = 300,
                                     h4("Insider Trading Parameters"),
                                     # 动态渲染控制栏内容
                                     uiOutput("controlbar_content")
    ),
    title = "DashboardPage"
  )),
  server = function(input, output) { 
    # 动态生成左侧边栏内容
    output$sidebar_content <- renderUI({
      current_tab <- input$main_tab
      if(current_tab == "Insider Training"){
        textInput("StockTicker", "Enter Stock Symbol", value = "NFLX")
      } else if(current_tab == "Switching"){
        textInput("StockTicker2", "Enter Stock Symbol 2", value = "NFLX")
      } else if(current_tab == "Tax Loss Harvesting"){
        textInput("StockTicker3", "Enter Stock Symbol 3", value = "NFLX")
      }
    })
    
    # 动态生成右侧控制栏内容
    output$controlbar_content <- renderUI({
      current_tab <- input$main_tab
      if(current_tab == "Insider Training"){
        selectInput("InsiderTradingModel", "Insider Trading Model",
                    c("Dynamic" = "Dynamic",
                      "AI based" = "AIbased"))
      } else if(current_tab == "Switching"){
        selectInput("InsiderTradingModel2", "Insider Trading Model 2",
                    c("Dynamic" = "Dynamic",
                      "AI based" = "AIbased"))
      } else if(current_tab == "Tax Loss Harvesting"){
        selectInput("InsiderTradingModel3", "Insider Trading Model 3",
                    c("Dynamic" = "Dynamic",
                      "AI based" = "AIbased"))
      }
    })
  }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:27:01