如何使用 shinyjs 同时 hide/show 多个元素?
How to hide/show several elements at once with shinyjs?
如何使用 shinyjs 同时 hide
/show
多个元素?在下面的示例中,我的目标是 hide/show 两个表只用两行代码而不是四行。我为什么要这样做?实际上,我正在处理多个表和多个事件,这样 showing/hiding 它们一次全部处理将使代码更清晰。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
actionButton("hide","Hide!"),
actionButton("show","Show!"),
tableOutput("table1"),
tableOutput("table2"))
server <- function(input, output, session) {
output$table1 <- renderTable({head(iris)})
output$table2 <- renderTable({head(iris)})
observeEvent(input$hide, {hide("table1")})
observeEvent(input$show, {show("table1")})
observeEvent(input$hide, {hide("table2")})
observeEvent(input$show, {show("table2")})}
shinyApp(ui, server)
您可以编写一个执行这两个操作的函数,并在每个要 hide/show 的 ui 元素中调用一次它们 hide/show。
library(shiny)
library(shinyjs)
toggleView <- function(input, output_name){
observeEvent(input$show, {show(output_name)})
observeEvent(input$hide, {hide(output_name)})
}
ui <- fluidPage(
useShinyjs(),
actionButton("hide","Hide!"),
actionButton("show","Show!"),
tableOutput("table1"),
tableOutput("table2"))
server <- function(input, output, session) {
output$table1 <- renderTable({head(iris)})
output$table2 <- renderTable({head(iris)})
toggleView(input, "table1")
toggleView(input, "table2")
}
shinyApp(ui, server)
您还可以更进一步,根据 output_name
验证此函数。但是,请确保使用 lapply
而不是 for
,因为后者可能 运行 导致惰性评估的问题。
toggleViews <- function(input, output_names){
lapply(output_names, function(output_name){
toggleView(input, output_name)
})
}
...
toggleViews(input, c("table1", "table2"))
如何使用 shinyjs 同时 hide
/show
多个元素?在下面的示例中,我的目标是 hide/show 两个表只用两行代码而不是四行。我为什么要这样做?实际上,我正在处理多个表和多个事件,这样 showing/hiding 它们一次全部处理将使代码更清晰。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
actionButton("hide","Hide!"),
actionButton("show","Show!"),
tableOutput("table1"),
tableOutput("table2"))
server <- function(input, output, session) {
output$table1 <- renderTable({head(iris)})
output$table2 <- renderTable({head(iris)})
observeEvent(input$hide, {hide("table1")})
observeEvent(input$show, {show("table1")})
observeEvent(input$hide, {hide("table2")})
observeEvent(input$show, {show("table2")})}
shinyApp(ui, server)
您可以编写一个执行这两个操作的函数,并在每个要 hide/show 的 ui 元素中调用一次它们 hide/show。
library(shiny)
library(shinyjs)
toggleView <- function(input, output_name){
observeEvent(input$show, {show(output_name)})
observeEvent(input$hide, {hide(output_name)})
}
ui <- fluidPage(
useShinyjs(),
actionButton("hide","Hide!"),
actionButton("show","Show!"),
tableOutput("table1"),
tableOutput("table2"))
server <- function(input, output, session) {
output$table1 <- renderTable({head(iris)})
output$table2 <- renderTable({head(iris)})
toggleView(input, "table1")
toggleView(input, "table2")
}
shinyApp(ui, server)
您还可以更进一步,根据 output_name
验证此函数。但是,请确保使用 lapply
而不是 for
,因为后者可能 运行 导致惰性评估的问题。
toggleViews <- function(input, output_names){
lapply(output_names, function(output_name){
toggleView(input, output_name)
})
}
...
toggleViews(input, c("table1", "table2"))