简体   繁体   English

根据条件在R Shiny中显示/隐藏selectinput

[英]Show / Hide selectinput in R shiny based on conditions

I am trying to use conditions to show or hide selectinputs in a R shiny app based if the tab is available in the UI or not. 我正在尝试使用条件来显示或隐藏R Shiny应用程序中的selectinput,无论该标签在UI中是否可用。 So on tabpanel with title product use then all the drop downs under product category should be seen else only the first dropdown under product category should be visible. 因此,在带有标题product use选项卡上,应该看到产品类别下的所有下拉列表,否则只有产品类别下的第一个下拉列表可见。

Below is what I am doing but not getting the condition to work: 以下是我正在执行的但没有使条件正常工作的方法:

 # This is the server logic for a Shiny web application. # You can find out more about building applications with Shiny here: # # http://shiny.rstudio.com # library(shiny) library(shinydashboard) library(shinyBS) library(knitr) library(kableExtra) library(shiny) library(shinythemes) ui <- dashboardPage( dashboardHeader(disable = F, title = "PATH Study"), dashboardSidebar( selectInput( "wave", h4("Wave"), choices = list( "Wave 1" = 1 ), selected = 1 ), sidebarMenu( menuItem( "Population Filter", selectInput( "ethnicity", h4("Ethnicity"), choices = list( "Hispanic" = 1, "Asian" = 2, "White" = 3, "African American" = 4 ), selected = 1 ), selectInput( "age", h4("Age Group"), choices = list( "Total" = 1, "Youth(12-17)" = 2, "Young Adult (18-24)" = 3, "Adult (25+)" = 4 ), selected = 1 ), selectInput( "category", h4("Gender"), choices = list( "Total" = 1, "Male" = 2, "Female" = 3 ), selected = 1 ) ) ), conditionalPanel( condition = "dashboardBody(tabPanel(title == 'product_use'))", sidebarMenu(menuItem( "Product Category", selectInput( "category", h4("Category"), choices = list( "Total Cigars" = 1, "Cigarillo" = 2, "Cigarette" = 3, "E-Vapor" = 4 ), selected = 1 ), selectInput( "flavor", h4("Flavor"), choices = list( "Total" = 1, "Flavored" = 2, "Non-Flavored" = 3 ), selected = 1 ), selectInput( "use_level", h4("User Level"), choices = list( "Total" = 1, "Experimental" = 2, "Established" = 3, "No Tobacco Use" = 4 ), selected = 1 ) )) ) ), #S dashboardPage(header = dashboardHeader(), sidebar = dashboardSidebar(),body,title = NUll, skin = "yellow"), dashboardBody(box( width = 12, tabBox( width = 12, id = "tabBox_next_previous", tabPanel("Initiation", fluidRow( box( title = "Wave 1 Ever Tried and % 1st Product Flavored", width = 5, solidHeader = TRUE, status = "primary", tableOutput("smoke"), collapsible = F, bsTooltip( "bins", "The wait times will be broken into this many equally spaced bins", "right", options = list(container = "body") ) ) )), tabPanel("Cessation", p("This is tab 3")), tabPanel("product_use", p("This is tab 4")), tags$script( " $('body').mouseover(function() { list_tabs=[]; $('#tabBox_next_previous li a').each(function(){ list_tabs.push($(this).html()) }); Shiny.onInputChange('List_of_tab', list_tabs);}) " ) ), uiOutput("Next_Previous") )) ) server <- function(input, output, session) { output$Next_Previous = renderUI({ tab_list = input$List_of_tab[-length(input$List_of_tab)] nb_tab = length(tab_list) if (which(tab_list == input$tabBox_next_previous) == nb_tab) column(1, offset = 1, Previous_Button) else if (which(tab_list == input$tabBox_next_previous) == 1) column(1, offset = 10, Next_Button) else div(column(1, offset = 1, Previous_Button), column(1, offset = 8, Next_Button)) }) output$smoke <- # renderTable({ # pct_ever_user(data_selector(wave = 1, youth = FALSE), type = "SM") # }) function() { pct_ever_user(data_selector(wave = 1, youth = FALSE), type = "SM")[, c("variable", "mean", "sum_wts", "se")] %>% # rename(pct_ever_user(data_selector(wave = 1, youth = FALSE), type = "SM"), c("mean"="N", "sum_wts"="Weighted N"))%>% knitr::kable("html") %>% kable_styling("striped", full_width = F) } output$table2 <- function() { # req(input$mpg) table2 %>% knitr::kable("html") %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) } output$consumption <- function() { # req(input$mpg) consumption %>% knitr::kable("html") %>% kable_styling("striped", full_width = F) } output$consumption_flav <- function() { # req(input$mpg) consumption_flav %>% knitr::kable("html") %>% kable_styling("striped", full_width = F) } } shinyApp(ui = ui, server = server) 

If you only want the Product Category menu to show up when you are on the product_use tab, you can set your condition to the following: 如果只希望在product_use标签上显示“产品类别”菜单,则可以将条件设​​置为以下内容:

condition = "input.tabBox_next_previous  == 'product_use'",

From ?conditionalPanel : ?conditionalPanel

condition 条件
A JavaScript expression that will be evaluated repeatedly to determine whether the panel should be displayed. 一个JavaScript表达式,将被反复评估以确定是否应显示面板。

In the JS expression, you can refer to input and output JavaScript objects that contain the current values of input and output. 在JS表达式中,您可以引用包含输入和输出的当前值的输入和输出JavaScript对象。 For example, if you have an input with an id of foo, then you can use input.foo to read its value. 例如,如果输入的ID为foo,则可以使用input.foo读取其值。 (Be sure not to modify the input/output objects, as this may cause unpredictable behavior.) (请确保不要修改输入/输出对象,因为这可能导致不可预测的行为。)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM