将选定的值从外部模块传递到 SHINY 中的内部模块

Pass selected values from outer module to inner module in SHINY

我一直在研究下面的问题

但是,我被问题的变体所困:

我试图仅将 某些值 (vals) 从 inputModule 传递到 outputModule。
但是,我的 inputModule 也有一个额外的渲染输出。这似乎阻止了该应用程序的运行。
在我的真实应用程序中,inputModule 需要将数据传递给嵌套的(outputmodule)并产生额外的输出和 UI。

如何将 callModule 或 MyImProxy 限制为仅 vals 而不是在应用服务器调用中将 output$mytext 传递到我的 outputModule?

在 inputModule 中保留 output$mytext 的同时是否可以使用此代码 运行?

非常感谢

library(shiny)

inputModuleUI <- function(id){
          ns <- NS(id)
          wellPanel(h3("Input Module"),
                    textInput(ns('text1'), "First text"),
                    textInput(ns('text2'), "Second text"), 
                    textInput(ns('text3'), "Third text")
                    ), 
          
          verbatimTextOutput(ns("mytext"))
}

inputModule <- function(input, output, session){
          vals <- reactiveValues()
          observe({vals$text1 <- input$text1})
          observe({vals$text2 <- input$text2})
          return(vals)
          
    #I need this output to stay in the inputModule
          
          output$mytext <- renderPrint({
                    
                    paste(input$text3)
                    
          })
          
          
          
}

outputModuleUI <- function(id){
          tagList(
                    inputModuleUI('IM'),
                    wellPanel(h3("Output Module"),
                              verbatimTextOutput(NS(id, "txt")))
          )
}
outputModule <- function(input, output, session, ImProxy){
          output$txt <- renderPrint({
                    paste(ImProxy$text1, "&", ImProxy$text2)
          })
}

ui <- fluidPage(
          outputModuleUI('OM')
)   
server <- function(input, output, session){
    
#here is where I need to only pass vals to MyImProxy...

          MyImProxy <- callModule(inputModule, 'IM') 
          callModule(outputModule, 'OM', MyImProxy)
}

shinyApp(ui, server) ```

你的问题出在inputModuleUI。如果你组合了几个 ui 元素,用 tagList:

包裹起来
inputModuleUI <- function(id){
      ns <- NS(id)
      tagList(
      wellPanel(h3("Input Module"),
                textInput(ns('text1'), "First text"),
                textInput(ns('text2'), "Second text"), 
                textInput(ns('text3'), "Third text")
      ), 
      
      verbatimTextOutput(ns("mytext"))
      )
}