R Shiny 在后台加载隐藏的侧边栏(使用 bs4Dash 包)

Posted

技术标签:

【中文标题】R Shiny 在后台加载隐藏的侧边栏(使用 bs4Dash 包)【英文标题】:R Shiny load hidden sidebar in the background (using bs4Dash package) 【发布时间】:2020-11-16 08:08:36 【问题描述】:

我使用 bs4Dash 构建了一个 R Shiny 仪表板。这个包允许我在右侧为输入选择器创建一个栏,因此我可以使用左侧菜单进行导航。应用程序启动时,右侧的 bs4DashControlbar 是隐藏的。问题是,如果我在服务器端创建一个选择器并在 ui 中使用 uiOutput(),它不会呈现 - 即我的两个选择器没有加载。我发现情况就是这样,因为控制栏一开始是隐藏的(我想要的)。我试图让控制栏中的选择器始终呈现为好像它是可见的。

请参阅下面的尝试。请注意,当“controlbar_collapsed”行未注释时,我的选择器加载得很好。但同样,我不希望控制栏在加载时可见,我进一步希望它始终保持更新,即使有人隐藏了控制栏。我的修复尝试在底部附近被注释掉。我尝试使用 outputOptions w/suspendWhenHidden。我认为这是正确的道路,但我无法让它发挥作用。还是有更好的办法?

library(shiny)
library(bs4Dash)

shiny::shinyApp(
  ui = bs4DashPage(
    old_school = FALSE,
    sidebar_min = TRUE,
    sidebar_collapsed = FALSE,
    #controlbar_collapsed = FALSE,  ###Uncomment this line and it loads just fine
    controlbar_overlay = TRUE,
    title = "Basic Dashboard",
    navbar = bs4DashNavbar(),
    sidebar = bs4DashSidebar(),
    controlbar = bs4DashControlbar(inputId = "Controller",
      sliderInput("slider", "Number of observations:", 1, 100, 50),
      uiOutput("TimeFrame"),
      uiOutput("Metrics")
    ),
    footer = bs4DashFooter(),
    body = bs4DashBody()
  ),
  server = function(input, output) 
    output$TimeFrame <- renderUI(selectInput("TimeFrame", "Select Time Frame:", 
                                              c("Last 01 Wks", "Last 04 Wks", "Last 13 Wks", "Last 52 Wks", "Year to Date"), 
                                              multiple=FALSE))
    output$Metrics <- renderUI(selectInput("Metrics", "Select a Metric:", 
                                            c("Metric A", "Metric B"), 
                                            multiple=FALSE))
    
    #outputOptions(output, "Controller", suspendWhenHidden = FALSE)  #This is what I tried
  
)

【问题讨论】:

【参考方案1】:
library(shiny)
library(shinyjs)
library(bs4Dash)

shiny::shinyApp(
  ui = fluidPage(
    useShinyjs(),
    bs4DashPage(
      old_school = FALSE,
      sidebar_min = TRUE,
      sidebar_collapsed = FALSE,
      # controlbar_collapsed = FALSE,  ###Uncomment this line and it loads just fine
      controlbar_overlay = TRUE,
      title = "Basic Dashboard",
      navbar = bs4DashNavbar(),
      sidebar = bs4DashSidebar(),
      controlbar = bs4DashControlbar(inputId = "Controller",
                                     sliderInput("slider", "Number of observations:", 1, 100, 50),
                                     shinyjs::hidden(div(id = "MyPanel",
                                                         uiOutput("TimeFrame"),
                                                         uiOutput("Metrics")))
      ),
      footer = bs4DashFooter(),
      body = bs4DashBody()
    )),
  server = function(input, output) 
    output$TimeFrame <- renderUI(selectInput("TimeFrame", "Select Time Frame:", 
                                              c("Last 01 Wks", "Last 04 Wks", "Last 13 Wks", "Last 52 Wks", "Year to Date"), 
                                              multiple=FALSE))
    output$Metrics <- renderUI(selectInput("Metrics", "Select a Metric:", 
                                            c("Metric A", "Metric B"), 
                                            multiple=FALSE))
    
    observe(
      if (input$Controller) 
        shinyjs::show("MyPanel")
       else 
        shinyjs::hide("MyPanel")
      
    )
    # outputOptions(output, "Controller", suspendWhenHidden = FALSE)  #This is what I tried
  
)

【讨论】:

谢谢!就在那里。此外,shinyjs 包 +1。直到现在我都不熟悉它。看起来它有很多有用的功能。

以上是关于R Shiny 在后台加载隐藏的侧边栏(使用 bs4Dash 包)的主要内容,如果未能解决你的问题,请参考以下文章

响应式更新模块化 Shiny 应用程序中的侧边栏

R shiny教程-2:布局用户界面

R 闪亮 - 侧边栏面板的背景

在 R Shiny App 中,如何在首次调用 App 时呈现默认表格?

在 adminlte-3 bootstrap-4 treeview 打开/隐藏页面加载后加载动态 AJAX 侧边栏菜单 jquery 不起作用

当侧边栏在 Shiny 中折叠时如何自动缩放 uiOutput()