我的目标是让 tabsetPanel 包装在条件面板中,其条件是全局变量为 false。
ui.R
mainPanel(
conditionalPanel("searchPage == \"false\"",
tabsetPanel(
tabPanel("Summary",htmlOutput("summary")),
tabPanel("Description", htmlOutput("description"))
))),
全球.R
searchPage <- "true"
然后在 server.R 中,我多次为其分配新值,但都是这样的:
observeEvent(input$openButton,
output$results <- renderUI({
textOutput("")
searchPage <- "false"
}))
无论我做什么,我总是收到“未捕获的引用错误:searchPage 未定义”。我尝试将 global.R 更改为使用引号、不使用引号、使用 <- or <<-, making it this.searchPage, my.searchPage and numerous other things (of course always making server.R and ui.R match too), but haven't had much luck at all.
的多种不同组合shinyjs
toggle()
/show()
/hide()
函数的完美用例。每当您需要有条件地显示某些内容,而条件不是输入的简单 javascript 表达式时,可以轻松使用这些函数而不是 conditionalPanel()
。
为了使用这些功能,您需要有某种方法来指定要隐藏/显示的元素(在本例中为
mainPanel()
)。最简单的方法是将整个面板包裹在一个带有 id 的 div 中。因此,像 mainPanel(div(id = "mainpanel", ...))
一样定义面板,瞧,您的面板有一个 id,现在您可以在服务器代码中随时调用 shinyjs::show("mainpanel")
或 hide()
。
您尝试做的事情实际上不可能像您尝试做的那样(服务器和客户端位于不同的环境中并且不共享变量)。您需要显式地将值从服务器传递到客户端,并且有不同的方法可以做到这一点。一种方法:
library(shiny)
ui = fluidPage(
conditionalPanel(condition='output.bool',
HTML("Hello world")
),
actionButton("btn","Press me to toggle")
)
server = function(input, output, session) {
value = TRUE
output$bool <- eventReactive(input$btn, {
value
})
outputOptions(output, "bool", suspendWhenHidden = FALSE)
observeEvent(input$btn, value <<- !value)
}
shinyApp(ui, server)
可能有更好的方法。希望这有帮助