闪亮:从模块获取输入

Shiny : get an input from a module

我正在尝试从模块获取输入到应用程序服务器。

这是我想要的示例,app.R :

library(shiny)
source("test.R")
ui <- fluidPage(
  tabPanel("tt", testUI("t"))
)

server <- function(input, output) {
   ret <- callModule(test, "testm")
   print(ret)
}

shinyApp(ui = ui, server = server)

一个测试模块:

testUI <- function(id) {
  ns <- NS(id)
  tabPanel(NULL,
       textInput(ns("textInput1"), label = h5(""), value = "")
  )}

  test <- function(input, output, session, data) {
    reactive({input$textInput1})
  }

我想从 app.R 的服务器函数打印 textInput1 的内容并观察它。

您的代码有两个问题:1) 在 UI 中,您在服务器 "testm" 中调用模块实例 "t"。这些必须相同。 2) Module returns 反应式;这需要在反应性上下文中进行评估:reactiveobserverender.

library(shiny)
source("test.R")
ui <- fluidPage(
  tabPanel("tt", testUI("testm"))
)

server <- function(input, output) {
  ret <- callModule(test, "testm")
  observe(print(ret()))
}

shinyApp(ui = ui, server = server)

上面的解决方案解决了我提供的示例的问题。

但是,我没有为我的应用解决它:

我的应用程序有 app.R、module1.R 和 module2.R 模块 2 由模块 1 调用,模块 1 本身由 app.R 调用。我想从 module1 函数打印 'textInput1' 的值。

app.R:

library(shiny)
source("module1.R")
ui <- fluidPage(
  tabPanel("Module 1", module1UI("module1"))
)

server <- function(input, output) {
  callModule(module1, "module1")
}

shinyApp(ui = ui, server = server)

module1.R:

source("module2.R")

module1UI <- function(id) {
  ns <- NS(id)
  tabPanel(NULL,
     tabPanel("Module 2", module2UI("module2"))
  )}

module1 <- function(input, output, session, data) {
  reactive({input$textInput1})
  ret <- callModule(module2, "module2")
  observe(print(ret()))
}

module2.R:

module2UI <- function(id) {
  ns <- NS(id)
  tabPanel(NULL,
     textInput(ns("textInput1"), label = h5(""), value = "")
  )}

module2 <- function(input, output, session, data) {
  reactive({input$textInput1})
}