如何根据选中的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
相关产品推荐
相关产品推荐

