【问题标题】:Pass selected values from outer module to inner module in SHINY将选定的值从外部模块传递到 SHINY 中的内部模块
【发布时间】:2021-06-04 04:15:00
【问题描述】:

我一直在研究以下问题。

here

但是,我遇到了问题的一个变体:

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

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

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

非常感谢

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) ```

【问题讨论】:

    标签: r shiny shiny-reactivity


    【解决方案1】:

    您的问题在于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"))
          )
    }
    

    【讨论】:

    • 这很有效,谢谢!但我有第二个问题 - 我如何将 inputModuleUI 放入 outputModuleUI - 为什么这不起作用?我已经编辑了原始问题
    • 我认为你必须在outerModule服务器函数中直接调用inputModule服务器函数并在那里分配返回值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 2014-04-05
    • 2012-10-02
    相关资源
    最近更新 更多