如何在Shiny Dashboard特定TabPanel中仅显示指定Widget
问题原因
你代码里的tabPanel标题用strong()包裹,但未指定name参数,导致input$tabs的实际取值不是预期的纯文本"PLAGIOCLASE SATURATION CHECK",而是被转义后的HTML内容,条件判断无法匹配,组件因此无法显示。
解决方法
给每个tabPanel添加name参数,让input$tabs对应明确的字符串标识,确保条件判断能准确触发。
修改后的完整代码
## app.R ## library(shiny) library(shinydashboard) library(shinyWidgets) ui <- dashboardPage( dashboardHeader(title = "P-T-H2O-An"), dashboardSidebar( uiOutput("filter1") ), dashboardBody( tabsetPanel( id="tabs", tabPanel( name = "plag_sat", strong("PLAGIOCLASE SATURATION CHECK") ), tabPanel( name = "an_content", strong("AN CONTENT") ), tabPanel( name = "thermometry", strong("THERMOMETRY") ), tabPanel( name = "hygrometry", strong("HYGROMETRY") ), tabPanel( name = "barometry", strong("BAROMETRY") ), tabPanel( name = "filter_save", strong("Filtering & Saving Estimates") ) ) ) ) server <- function(input, output) { output$filter1<-renderUI({ if(input$tabs == "plag_sat"){ pickerInput( inputId = "x1", label = "Select all option", choices = rownames(mtcars), multiple = F, options = list(`actions-box` = TRUE) ) } else { return(NULL) } }) } shinyApp(ui, server)
补充说明
- 设置
name参数后,input$tabs直接返回该参数的值,不受标题HTML样式影响,判断逻辑更稳定。 - 若不想额外设置
name,也可以用tags$strong包裹标题并声明html=TRUE,此时input$tabs会返回纯文本标题:
这种情况下server里的判断可保留tabPanel( title = tags$strong("PLAGIOCLASE SATURATION CHECK"), html = TRUE )input$tabs == "PLAGIOCLASE SATURATION CHECK",但设置name的方式更推荐,尤其适合标题文本较长或需频繁修改样式的场景。
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

