如何在Shiny中隐藏条件面板?

Joe*_*Joe 3 r shiny shinyjs

如何在Shiny中隐藏条件面板?请参阅以下示例:

library(shiny)

ui <- fluidPage(
  actionButton("eval","Evaluate"),
  numericInput("num_input", "If number is changed, cp must hide", value = 0),
  conditionalPanel(
      condition = "input.eval",
      "text"))

server <- function(input, output, session) {
  observeEvent(input$num_input, {
    input$eval <- 0
  })}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

我要实现的目标是:一旦用户单击评估按钮,num_input便会出现条件面板,但是一旦更改了数字,该面板就会消失。我的想法是使评估按钮为空,但这不起作用(该应用程序以灰色背景打开,似乎冻结了)。

我也这样尝试过shinyjs

library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  actionButton("eval","Evaluate"),
  numericInput("num_input", "If number is changed, cp must hide", value = 0),
  conditionalPanel(
      id = "cond_panel",
      condition = "input.eval",
      "text"))

server <- function(input, output, session) {
  observeEvent(input$num_input, {
    reset("cond_panel")})}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

但这也不起作用:应用程序会定期打开,并且一旦单击评估按钮,便会显示条件面板,但是一旦更改了数字,则什么也不会发生。

gre*_*g L 5

您可以创建一个输出值,并将其仅用于条件面板。有关动态UI的文章介绍了如何执行此操作:

http://shiny.rstudio.com/articles/dynamic-ui.html

该条件也可以使用输出值。它们以相同的方式工作(output.foo为您提供了输出foo的值)。如果您希望使用R表达式作为条件参数,可以在服务器函数中创建一个反应式表达式并将其分配给新的输出,然后在条件表达式中引用该输出。

如果这样做,请确保还设置outputOptions(output,[newOutputName],suspendWhenHidden = FALSE)。(这是必要的,因为Shiny通常不会将隐藏或不存在于UI中的输出的值发送到浏览器。但是,在这种情况下,浏览器确实需要按顺序知道最新的输出值正确评估contitionalPanel函数的条件-suspendedWhenHidden = FALSE确保会发生这种情况。)

library(shiny)

ui <- fluidPage(
  actionButton("eval","Evaluate"),
  numericInput("num_input", "If number is changed, cp must hide", value = 0),
  conditionalPanel("input.eval && !output.hide_panel", "text")
)

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

  output$hide_panel <- eventReactive(input$num_input, TRUE, ignoreInit = TRUE)

  outputOptions(output, "hide_panel", suspendWhenHidden = FALSE)
}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

另一种方法是转到renderUI条件面板,并显示它直到input$num_input更改。