嵌套/多个对话框闪亮

时间:2018-05-22 12:51:54

标签: r shiny modal-dialog

是否可以在闪亮的情况下打开多个对话框?

在下面的应用程序中,我想显示一个模态对话框,它本身可以打开另一个"详细信息"模态对话框。这很有效,但每当"细节"对话框打开,第一个对话框消失。

我想打开第二个对话框"在顶部"第一个,每当我关闭第二个对话框时,我想再次看到第一个对话框。

我如何用闪亮的方式做到这一点?

library(shiny)

ui <- basicPage({
  actionButton("openDialog", "Open dialog")
})

server <- function(input, output, session) {

  observeEvent(input$openDialog, {
    showModal(
      modalDialog(
        actionButton("openDetails", "OpenDetails")
      )
    )
  })

  observeEvent(input$openDetails, {
    showModal(modalDialog(div("Test")))
  })
}

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

这不完全是您想要的,但是您始终可以在取消第二个模型后恢复第一个模态。为此,请在您的library(shiny)语句之后,添加一个函数以显示第一个模型:

library(shiny)
showFirstModal <- function() {
  showModal(
    modalDialog(
      actionButton("openDetails", "OpenDetails")
    )
  )
}

然后将调用第一个模式的观察事件代码更改为调用该函数的代码:

observeEvent(input$openDialog, {
    showFirstModal()
})

然后,在创建第二个模式时,强制用户单击您自己的操作按钮以将其关闭。这将允许您监视该模式的关闭,然后恢复第一个模式:

observeEvent(input$openDetails, {
    showModal(modalDialog(div("Test"),
          easyClose=FALSE,
          footer = actionButton("restoreModal",label = "Dismiss")))
})

最后,当点击关闭按钮时,调用该函数以重新显示第一个模态:

observeEvent(input$restoreModal, {
    showFirstModal()
})

如果您确实要在彼此上方显示多个模式框(可能看起来很杂乱),则可以手动创建模式(有关如何完成此操作的信息,请参见https://www.w3schools.com/howto/howto_css_modals.asp)。