r语言 - 访问在观察中创建的响应



我试图访问在observe( )中创建的响应,并希望从模块返回对象。在下面的示例中,我正在从模块中寻找mydf()input$account_page。我知道我可以用observeEvent(input$go_to, { })来展示模态,但是我有其他的用途来这样做,这对我来说很难创建一个可复制的例子。因此,我为指定的问题创建了以下代码:

library(shiny)
library(shinyWidgets)
choiceVec <- c("Beef/Pork" = "beefpork","Sugar sweeteened bev." = "ssb",
"Total fruit" = "total_fruit")
address_ui <- function(id) { }
address_server <- function(id, signin =  reactive(0)) {
moduleServer(id, function(input, output, session) {

observe({

shiny::showModal(

shiny::modalDialog(

fluidRow(

column(
width = 6,

shiny::textInput(
"state",
"State",
width = "100%", 
placeholder = "California"
)),

column(
width = 6,

shinyWidgets::pickerInput(
"country",
"Country",
choices = choiceVec, 
width = "100%", 
# selected = "us",
options = list(
title = "Select Country",
`live-search` = TRUE)
)
)),

title = "Address",
footer = tags$span(
shiny::actionButton(
'account_page',
'Next'
)
),
size = 'm'
)
)


mydf <- reactive({

list(
state = input$state,
country = input$country
)

})


})

return( list(mydf(), reactive({ input$account_page }) ))

})

}


ui <- fluidPage(
actionLink(
"go_to",
"Click Me",
icon = icon("credit-card")
),
address_ui("user_info")
)
server <- function(input, output, session) {

user_details_return <- address_server(
id = "user_info",
signin = 1
)


}
shinyApp(ui, server)

响应对象mydf()仅在观察者内部可用。试试这个

library(shiny)
library(shinyWidgets)
choiceVec <- c("Beef/Pork" = "beefpork","Sugar sweeteened bev." = "ssb",
"Total fruit" = "total_fruit")
address_ui <- function(id) {ns <- NS(id) 
verbatimTextOutput(ns("t1")) }
address_server <- function(id, signin =  reactive(0)) {
moduleServer(id, function(input, output, session) {
ns <- session$ns
observe({

shiny::showModal(

shiny::modalDialog(

fluidRow(

column(
width = 6,

shiny::textInput(
ns("state"),
"State",
width = "100%", 
placeholder = "California"
)),

column(
width = 6,

shinyWidgets::pickerInput(
ns("country"),
"Country",
choices = choiceVec, 
width = "100%", 
# selected = "us",
options = list(
title = "Select Country",
`live-search` = TRUE)
)
)),

title = "Address",
footer = tags$span(
shiny::actionButton(
ns('account_page'),
'Next'
)
),
size = 'm'
)
)


mydf <- reactive({

list(
state = input$state,
country = input$country
)

})

observeEvent(input$account_page, {
removeModal()
return( list(mydf(), reactive({ input$account_page }) ))
})

output$t1 <- renderPrint({
mydf()
})
})

})

}

ui <- fluidPage(
actionLink(
"go_to",
"Click Me",
icon = icon("credit-card")
),
address_ui("user_info") 
)
server <- function(input, output, session) {

user_details_return <- address_server(
id = "user_info",
signin = 1
)

}
shinyApp(ui, server)

请注意,您不需要将showModal放在observer中,您可以直接执行

observe({return( list(mydf(), reactive({ input$account_page }) )) })
observeEvent(input$account_page, {
removeModal()
})

最新更新