执行闪亮的代码,而无需等待modalDialog

时间:2020-07-15 22:34:53

标签: r shiny modal-dialog

我有一个问题,执行闪亮的代码而没有等待modalDialog的用户输入。这是一个简单的例子。该应用程序具有打印按钮和一个输出框。当用户单击按钮时,应该弹出一个modalDialog询问用户要打印什么。如果用户单击打印按钮1 按钮,则最终的打印输出将为按钮1打印结果。按钮2也是一样。

library(shiny)


# Main app UI
ui <- fluidPage(
  actionButton('print','Print')
  ,verbatimTextOutput('output')

)

# Main app server
server <- function(input, output, session) {
  printVal <- reactiveVal("Should not be printing this")
  
  observeEvent(input$print,{
    showModal(
      modalDialog(
        title = 'What to print?'
        ,"Decide what to print"
        ,footer = tagList(
          actionButton('btn1','Print Button 1')
          ,actionButton('btn2','Print BUtton 2')
          
        )
      )
    )
    
    output$output <- renderPrint({printVal()})
  })
  
  observeEvent((input$btn1),{
    printVal('Button 1 Print Result')
    removeModal()
  })
  observeEvent((input$btn2),{
    printVal('Button 2 Print Result')
    removeModal()
  })
}

shinyApp(ui, server)

但是最终发生的事情是,当单击“打印”时,将在输出之前中打印默认值,该默认值设置为“不应进行此打印”,用户有机会单击modalDialog中的任何按钮。我想要的是,唯一的输出应该是单击按钮1或2的结果。但是执行该行似乎很闪亮

 output$output <- renderPrint({printVal()})

无需等待来自modalDialog的操作。

基本上,如何使它在使用前从modalDialog更新printVal?预先感谢您的回复。

1 个答案:

答案 0 :(得分:1)

您太早定义了output$output。试试这个

observeEvent((input$btn1),{
    output$output <- renderPrint({printVal()})
    printVal('Button 1 Print Result')
    removeModal()
  })
  observeEvent((input$btn2),{
    output$output <- renderPrint({printVal()})
    printVal('Button 2 Print Result')
    removeModal()
  })

对我来说很好。