闪亮:单击valueBox触发弹出窗口

时间:2019-04-17 07:32:19

标签: r shiny shinydashboard shinyjs shinybs

我想通过单击valueBox在弹出窗口中显示数据表。 valueBox本身应作为actionButton使用。

当我单击valueBox时,它应该在弹出窗口中呈现一个表格,如下图所示。

enter image description here

任何人都可以提供此代码帮助吗?

我的代码:

library(shiny)
library(shinydashboard)

data <- iris

ui <- dashboardPage(
  dashboardHeader(title = "Telemedicine HP"),
  dashboardSidebar(),
  dashboardBody(
    fluidRow(
      valueBox( 60, subtitle = tags$p("Attended", style = "font-size: 200%;"),
                icon = icon("trademark"), color = "purple", width = 4,
                href = NULL))))

server <- function(input,output){
}

shinyApp(ui, server)

2 个答案:

答案 0 :(得分:0)

您可以使用onclick创建一个shinyjs事件。因此,您需要在ui中添加useShinyjs(),可以通过将ui包装在tagList中来完成。

当单击具有给定ID的元素时,将在您的服务器中触发onclick函数。因此,您还需要给valueBox提供一个ID。我决定将其包装在具有ID的div中。

下一部分是在触发onclick事件时创建一个弹出窗口。您可以使用showModal中的shinyBS函数来完成此操作。

工作示例

library(shiny)
library(shinydashboard)
library(shinyjs)
library(shinyBS)

data <- iris

ui <- tagList(
  useShinyjs(),
  dashboardPage(
    dashboardHeader(title = "Telemedicine HP"),
    dashboardSidebar(),
    dashboardBody(
      fluidRow(
        div(id='clickdiv',
            valueBox(60, subtitle = tags$p("Attended", style = "font-size: 200%;"), icon = icon("trademark"), color = "purple", width = 4, href = NULL)
        )
      )
    )
  )
)

server <-  function(input, output, session){
  onclick('clickdiv', showModal(modalDialog(
    title = "Your title",
    renderDataTable(data)
  )))
}

shinyApp(ui, server)

答案 1 :(得分:0)

这是没有shinyjs

的另一种解决方案
library(shiny)
library(shinydashboard)
library(shinyBS)

data <- iris

ui <- tagList(
  dashboardPage(
    dashboardHeader(title = "Telemedicine HP"),
    dashboardSidebar(),
    dashboardBody(
      fluidRow(
        div(id='clickdiv',
            valueBox(60, subtitle = tags$p("Attended", style = "font-size: 200%;"), icon = icon("trademark"), color = "purple", width = 4, href = NULL)
        )
      ),
      bsModal("modalExample", "Data Table", "clickdiv", size = "large",dataTableOutput("table"))
    )
  )
)

server <-  function(input, output, session){

  output$table <- renderDataTable({
    head(data)
  })

}

shinyApp(ui, server)

enter image description here