R语言 在打开模态之前更新模态UI

l7mqbcuq  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(118)

从第二次开始,当你点击打开模态的按钮时,模态首先打开,显示旧的数据,然后触发渲染函数的更新。

library(shiny)

showMyModal <- function() {
  showModal(
    modalDialog(
      verbatimTextOutput("mytext"),
      footer = tagList(
        modalButton("Dismiss"),
      )
    )
  )
}

ui <- fluidPage(
  actionButton("openDialog", "Open dialog")
)

server <- function(input, output, session) {
  
  observeEvent(input$openDialog, {
    showMyModal()
  })
  
  output$mytext <- renderPrint({
    input$openDialog
  })
  
}

shinyApp(ui = ui, server = server)

有没有一个聪明的方法,首先更新模态用户界面,然后才打开模态?我正在寻找一种方法,模态不显示过时的数据之前,它得到刷新。

a8jjtwal

a8jjtwal1#

这是一种利用我前面的答案的方法。
下面的代码阻止了modalDialog的显示,直到模态被(重新)呈现:

library(shiny)

showMyModal <- function() {
  showModal(
    conditionalPanel("input.modal_visible == true",
                     modalDialog(
                       verbatimTextOutput("mytext"),
                       footer = tagList(
                         modalButton("Dismiss"),
                       )
                     )
    )
  )
}

ui <- fluidPage(
  tags$script(HTML(
    "$(document).on('shown.bs.modal','#shiny-modal', function () {
       Shiny.setInputValue(id = 'modal_visible', value = true);
      });
     $(document).on('hidden.bs.modal','#shiny-modal', function () {
       Shiny.setInputValue(id = 'modal_visible', value = false);
     });"
  )),
  actionButton("openDialog", "Open dialog")
)

server <- function(input, output, session) {
  observeEvent(input$openDialog, {
    showMyModal()
  })
  
  output$mytext <- renderPrint({
    input$openDialog
  })
}

shinyApp(ui = ui, server = server)

相关问题