R语言 bslib卡仅在全屏时呈现内容

xzv2uavs  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(96)

我使用bslib为我的闪亮的UI.我有一堆卡,其中full_screen = TRUE .当一张卡展开到全屏,我希望它呈现一个表.我只希望它呈现表格时,在全屏模式.我如何才能实现这一点?
下面是一些reprex代码:

library(shiny)
library(bslib)
library(DT)
library(purrr)

datasets <- list(
  Iris = iris, Mtcars = mtcars, Volcanos = volcano,
  `Chick Weights` = chickwts, Earthquakes = quakes, 
  `US Arrests` = USArrests, `C02` = co2, `Air Quality` = airquality
)

ui <- page_fillable(
  uiOutput("cards")
)

server <- function(input, output) {
  
  output$cards <- renderUI({
    
    card_list <- imap(datasets, ~{
      card(
        card_header(.y),
        card_body(
          datatable(head(as.data.frame(.x)))
        ),
        full_screen = TRUE,
        height = 200
      )
    }) |> 
      unname()
    
    # I only want the table to show when in full screen
    layout_columns(
      !!!card_list
    )
  })
}

shinyApp(ui = ui, server = server)

字符串
在这个例子中,DT表总是呈现,即使卡片很小。我只希望在卡片全屏时呈现表。在我的实际用例中,表将由数据库调用填充,所以我希望它也是懒惰的(即,只在卡片展开时构建表)。

dy2hfwbg

dy2hfwbg1#

你可以使用getCurrentOutputInfo。下面是一个绘图的例子:

library(shiny)
library(bslib)
library(ggplot2)

# UI logic
ui <- page_fluid(
  card(
    max_height = 200,
    full_screen = TRUE,
    card_header("A dynamically rendered plot"),
    plotOutput("plot_id")
  )
)

# Server logic
server <- function(input, output, session) {
  output$plot_id <- renderPlot({
    info <- getCurrentOutputInfo()
    if (info$height() > 200) {
      ggplot(mtcars, aes(wt, mpg)) +
        geom_point() 
    } 
  })
}

shinyApp(ui, server)

字符串


的数据

相关问题