我发现这个post关于如何在模块之间传递输入,但我不知道如何将模块传递给父应用程序。
如果我有一个模块 ui1.R
ui1UI <- function(id, label = "ui1UI") {
ns <- NS(id)
shinyUI(fluidPage(
textInput(ns('id'), 'ID'),
actionButton(ns("confirm"), "Submit", class='btn-primary')
))
}
ui1 <- function(input, output, session) {
cond <- reactive({ input$confirm})
observeEvent(length(input$id)!="", {
toggleState("confirm")
})
return(cond)
}
我想从 server.R
访问cond
shinyServer(function(input, output, session) {
cond <- callModule(ui1, "ui1")
callModule(server, "ui1a", cond)
output$page <- renderUI(expr= if(is.null(cond())) {
ui1UI('ui1')
} else {
ui2UI('ui2')
}
)
})
如何将cond
的值传递给server.R
?
应用程序的其余部分是:
ui.R
tagList(useShinyjs(), htmlOutput("page"))
global.R
rm(list=ls())
source('ui1.R')
source('ui2.R')
library(shiny)
library(shinyjs)
ui2.R
ui2UI <- function(id, label = "ui2UI") {
ns <- NS(id)
shinyUI(fluidPage(
textInput(ns('id'), 'Second Page')
))
}
ui2 <- function(input, output, session) {
}
最终,我希望渲染 ui1.R ,但我得到 ui2.R ,好像cond
没有被收到在if()
。
ps:r-bloggers帖子使用callModules()
。它只是callModule()
的旧选择吗?
答案 0 :(得分:0)
我不确定你的问题究竟是什么。你有正确的想法。下面是一个使用您的模块显示操作按钮值的示例(这有点奇怪,但无论如何):
[projects NO-HEAD]