隐藏在tagList中创建的小部件

时间:2017-12-13 12:33:48

标签: shiny

我最近正在构建一个shiny应用,在我的应用中的某个地方我希望用户可以从一行selectInput()小部件中指定任意数量的输入。

由于selectInput()窗口小部件的数量可能很大,我希望下一个selectInput()窗口小部件仅在用户填充前一个窗口小部件时显示。

我的想法是,我会:

  1. selectInput()
  2. 中创建所有可能的tagList小部件
  3. 默认隐藏所有内容,
  4. 显示上一个填充时的下一个。
  5. 我对第一步和第三步很好,但是当我尝试使用shinyjs函数hide隐藏它们时,它似乎不适用于{{1}中创建的输入对象它只适用于使用特定名称创建的那些小部件,请参阅下面的示例:

    tagList

    假设我创建了6个library(shiny) library(shinyjs) ui <- fluidPage( # Application title titlePanel("Hello Shiny!"), sidebarLayout( # Sidebar with a slider input sidebarPanel( sliderInput("obs", "Number of observations:", min = 0, max = 1000, value = 500) ), # Show a plot of the generated distribution mainPanel( useShinyjs(), uiOutput('comparisons') ) ) server <- shinyServer(function(input, output, session) { observe(1, shinyjs::hide('compare_1') ) output$comparisons=renderUI({ out=tagList() out=lapply(1:6, function(x){ selectizeInput(paste0('compare_',x), label = 'Condition 1', c('aa','bb', 'cc')) }) out }) }) shinyApp(ui, server) 小部件,将其selectInput命名为compare_1,我还创建了一个名为compare_6的{​​{1}}来展示举个例子。在服务器中,如果我只说sliderInputobs将被隐藏,但当我致电shinyjs::hide('obs')时,sliderInput仍然存在。任何想法将不胜感激!

1 个答案:

答案 0 :(得分:1)

嗨,你可以用conditinalPanel很容易

来做到这一点
ui <- fluidPage(

  # Application title
  titlePanel("Hello Shiny!"),

  sidebarLayout(

    # Sidebar with a slider input
    sidebarPanel(
      sliderInput("obs",
                  "Number of observations:",
                  min = 0,
                  max = 1000,
                  value = 500)
    ),

    # Show a plot of the generated distribution
    mainPanel(
      useShinyjs(),
      uiOutput('comparisons')
    )
  )
)


server <- shinyServer(function(input, output, session) {

  output$comparisons=renderUI({
    out=tagList(
      selectizeInput(paste0('compare_1'),
                     label = 'Condition 1',
                     c("",'aa','bb', 'cc')),
      lapply(2:6,  function(x){ 
        conditionalPanel(
          paste0("input.compare_",x-1," != ''"),
          selectizeInput(paste0('compare_',x),
                         label = paste0('Condition ',x),
                         c("",'aa','bb', 'cc'))
        )
      })
    )
    out 
  })



})

shinyApp(ui, server)