【问题标题】:Shiny: Open new dashboard with actionButtonShiny:使用 actionButton 打开新仪表板
【发布时间】:2020-01-19 05:50:25
【问题描述】:

我想通过按第一个仪表板上的操作按钮打开第二个仪表板。我可以使用下面的代码做到这一点,但仪表板是相互连接的。例如。如果我关闭第二个仪表板上的侧边栏,第一个仪表板上的侧边栏也会关闭。

这是 server.R 文件:

function(input, output, session) {
  # some more code

  # react to clicking on button show2
  observeEvent(input$show2, {
      # here is some more code
      showModal(settngsModal())
  })

  settngsModal <- function() {
    modalDialog(

      withTags({ 
        dashboardPage(
          dashboardHeader(
            title = "Second Dashboard"
          ),
          dashboardSidebar(
            sidebarMenu(
              menuItem("Widgets", tabName = "widgets", icon = icon("th"))
            )),
          dashboardBody(
            tabItem(tabName = "widgets",
                    h1("Widgets tab content")
            )
          )
        )
      }),
      title = "Settings",
      fade = TRUE)
  }
}

这是 ui.R 文件:

dashboardPage(

    dashboardHeader(
      title = "First dashboard"
    ),

    dashboardSidebar(collapsed = TRUE,sidebarMenu()),
    dashboardBody(),

      h1('Headline'),

      actionButton("show2", "Show second dashboard", size = 'lg')
    )
)

是否可以有一个“独立”的仪表板?

甚至可能有两个可以并排使用的仪表板(因为现在第二个仪表板是一个弹出窗口,而第一个仪表板只有在第二个仪表板关闭时才能使用)?

【问题讨论】:

    标签: r shiny shinydashboard action-button


    【解决方案1】:

    您可以在两个dashBoardPage 标签之间使用shinyjstoggle

    下面是在两个 Dashboards 之间切换的示例,有一个 decent issue thread 围绕渲染 UI dashboardPage 元素 reactively

    
    library(shiny)
    library(shinydashboard)
    library(shinyjs)
    
    ui <-  tagList(
      useShinyjs(),
    
      div(id = "dashboard_two",
          style = "display:none",
          dashboardPage(
            dashboardHeader(
              title = "Second dashboard"
            ),
            dashboardSidebar(collapsed = TRUE,sidebarMenu()),
            dashboardBody(fluidRow(actionButton("show1", "Show first dashboard")),
                          fluidRow(box(title = "Dash Two", height = 300, "Testing Render")) )
          )
      ),
    
      div(id = "dashboard_one",
          style = "display:none",
          dashboardPage(
    
            dashboardHeader(
              title = "First dashboard"
            ),
            dashboardSidebar(collapsed = TRUE, sidebarMenu()),
            dashboardBody(actionButton("show2", "Show second dashboard")
                          )
          )
      )
    )
    
    
    server <- function(input, output) {
      shinyjs::show("dashboard_one")
      observeEvent({ input$show1; input$show2}, {
        shinyjs::toggle("dashboard_one")
        shinyjs::toggle("dashboard_two")
      })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 它对我不起作用,我收到错误:找不到函数“taglist”。如果它对你有用,你能告诉我如何解决这个问题吗?谢谢!
    • 这很奇怪,你确定你正在加载上面所有的shiny 库吗?它只是一个 function 附带 Shiny
    • 确保你写的是tagList而不是taglist :)
    • 是的,我什至复制并粘贴了您的简单示例,并重新安装了 Rtools 和您使用的所有库。每次我得到:Warning: Error in taglist: could not find function "taglist" [No stack trace available]
    • 好的,完美。 R文件的位置有问题。非常感谢!
    猜你喜欢
    • 2019-12-05
    • 1970-01-01
    • 2021-04-05
    • 2015-12-25
    • 2018-12-05
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    相关资源
    最近更新 更多