用于显示 Table 的闪亮模块

Shiny Module for Displaying a Table

Shiny入门,我尝试学习如何使用Shiny Module设计模式。作为最简单的示例,我想在没有任何进一步交互的情况下显示数据集。

我希望在 navbarPagetabPanel 中组织 UI。每个面板都是相互独立的,(除了所有面板都使用一个全局数据库连接对象,但这现在不困扰我)。

这是 DT GUI 元素的代码:

library(shiny)
library(DT)

tabTable <- function(id) {
    ns <- shiny::NS(id)
    tabPanel(
        "Table",
        shiny::dataTableOutput(ns("table"))
    )
}

这是服务器逻辑。我想让它绘制数据 table.

srvTable <- function(id, dat) shiny::moduleServer(id,
    function(input, output, session) {
        output$table <- shiny::renderDataTable({DT::datatable(dat)})
    }
)

现在这里是 ui 和服务器的定义:

ui <- shiny::navbarPage(title="Test",
    tabTable(id="iris"),
    shiny::tabPanel(title="Scatter")
)

server <- function(input, output, session) {
    srvTable(id="iris", dat=iris)
    session$onSessionEnded(stopApp)
}

shiny::shinyApp(ui, server)

此应用启动,显示导航栏,但不显示数据集。有什么提示我把命令放在哪里吗?对我来说,问题是没有明显的条件需要服务器模块做出反应。这种情况怎么办?

试试这个

library(shiny)
library(DT)

tabTable <- function(id) {
  ns <- shiny::NS(id)
  tabPanel(
    "Table",
    DTOutput(ns("table"))
  )
}

srvTable <- function(id, dat) { shiny::moduleServer(id,
                                                  function(input, output, session) {
                                                    output$table <- renderDT({DT::datatable(dat)})
                                                  }
)}

ui <- shiny::navbarPage(title="Test",
                        tabTable(id="iris"),
                        shiny::tabPanel(title="Scatter")
)

server <- function(input, output, session) {
  srvTable(id="iris", dat=iris)
  session$onSessionEnded(stopApp)
}

shiny::shinyApp(ui, server)