【问题标题】:Show/Hide bsCollapse panels in Shiny在 Shiny 中显示/隐藏 bsCollapse 面板
【发布时间】:2018-05-12 03:14:16
【问题描述】:

我正在使用 ShinyBS 和 Shinyjs 包构建一个闪亮的应用程序,我想根据另一个 bscollapse 面板中单选按钮上的输入来隐藏/显示 bscollapse 面板。

当在 Parent1 中选择“AAA”或“BBB”选项时,我只想在 Parent2 中显示“AAAA”和“BBBB”折叠面板。

当在 Parent1 中选择“CCC”或“DDD”选项时,我只想在 Parent2 中显示“CCCC”和“DDDD”折叠面板。

我正在使用来自 shinyjs 包的 show() 和 hide() 命令,但我无法使其工作。 When "AAA" or "BBB" is selected, nothing is appearing in Parent2, which is not what I want.

下面是重现问题的代码:

library(shiny)
library(shinyBS)
library(shinyjs)

server = function(input, output, session) {

observeEvent(input$TypeRadio,{
if (input$TypeRadio == "AAA" || input$TypeRadio == "BBB")
  shinyjs::show("collapse1")
  shinyjs::hide("collapse2")
})

observeEvent(input$TypeRadio,{
if (input$TypeRadio == "CCC" || input$TypeRadio == "DDD")
  shinyjs::show("collapse2")
  shinyjs::hide("collapse1")})
}


ui = fluidPage(
shinyjs::useShinyjs(),

bsCollapse(id = "collapseExample", multiple = FALSE,
bsCollapsePanel("Parent1","",

              radioButtons("TypeRadio", "",
                           choices = list("AAA" = "AAA",
                                          "BBB" = "BBB",
                                          "CCC" = "CCC",
                                          "DDD" = "DDD"),
                           inline = FALSE)),


bsCollapsePanel("Parent2","",

              bsCollapse(id = "collapse1",   
                         bsCollapsePanel("AAAA", ""),
                         bsCollapsePanel("BBBB", "")),

              bsCollapse(id = "collapse2",   
                         bsCollapsePanel("CCCC", ""),
                         bsCollapsePanel("DDDD", ""))

                         )
 )                 
 )
shinyApp(ui = ui, server = server)

【问题讨论】:

  • 好的,我刚刚使用 conditionalPanel 而不是 show() 和 hide() 让它工作。但是我很想知道为什么它首先使用 show/hide() 不起作用。任何意见将不胜感激,谢谢!
  • 我认为这是ifelse() 的工作方式。当您使用输入验证值时,将检查左侧分配。请在下面查看我的回答,我对您的代码进行了少许更改以按需要工作。

标签: shiny shinyjs shinybs


【解决方案1】:
library(shiny)
library(shinyBS)
library(shinyjs)

if(interactive()){
  shinyApp(
    ui <- fluidPage(
      useShinyjs(),
      bsCollapse(id = "collapseExample", multiple = FALSE,
                 bsCollapsePanel("Parent1","",
                                 radioButtons("TypeRadio", "",
                                              choices = list("AAA" = "AAA",
                                                             "BBB" = "BBB",
                                                             "CCC" = "CCC",
                                                             "DDD" = "DDD"),
                                              inline = FALSE)),
                 bsCollapsePanel("Parent2","",
                                 bsCollapse(id = "collapse1",   
                                            bsCollapsePanel("AAAA", ""),
                                            bsCollapsePanel("BBBB", "")),

                                 bsCollapse(id = "collapse2",   
                                            bsCollapsePanel("CCCC", ""),
                                            bsCollapsePanel("DDDD", ""))
                                 )
      )
    ),

    server = function(input, output, session){

      observeEvent(input$TypeRadio,{
        if("AAA" == input$TypeRadio | "BBB" == input$TypeRadio){
          shinyjs::show("collapse1")
          shinyjs::hide("collapse2")
        }

        if("CCC" == input$TypeRadio | "DDD" == input$TypeRadio){
          shinyjs::hide("collapse1")
          shinyjs::show("collapse2")
        }
      })

    }
  )
}

【讨论】:

  • 谢谢!!就这么简单:)
猜你喜欢
  • 1970-01-01
  • 2021-07-09
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2016-04-09
  • 1970-01-01
相关资源
最近更新 更多