在 Shiny 中显示/隐藏 bsCollapse 面板
Posted
技术标签:
【中文标题】在 Shiny 中显示/隐藏 bsCollapse 面板【英文标题】:Show/Hide bsCollapse panels in Shiny 【发布时间】: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()
的工作方式。当您使用输入验证值时,将检查左侧分配。请在下面查看我的回答,我对您的代码进行了少许更改以按需要工作。
【参考方案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")
)
)
【讨论】:
谢谢!!就这么简单:)以上是关于在 Shiny 中显示/隐藏 bsCollapse 面板的主要内容,如果未能解决你的问题,请参考以下文章
基于选项卡面板选择在 R Shiny 中显示/隐藏 selectinput