R 在菜单项单击上打开模式,但仅一次

问题描述 投票:0回答:1

我想通过单击

modalDialog
选项卡来打开
menuItem
窗口。在这里提出并回答了类似的问题,我将其用作模板: 在菜单项上单击打开模式
我的问题的不同之处在于我只想显示此 modalDialog 一次。如果您第二次单击 menuItem 选项卡,则不应显示此 modalDialog。
如果
widgets
选项卡位于第一位,您可以使用
observeEvent(once = TRUE)
。因为
widgets
选项卡仅排在第三位,因此需要新的解决方案。
有人可以帮助我解决我的问题吗?

这是我的可重现示例:

library(shiny)
library(shinydashboard)

## UI ##

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenu(id = "sidebarmenu",
                menuItem("Dashboard", tabName = "dashboard"),
                menuItem("Subitems", tabName = "subitems",
                         menuSubItem("Upload", "upload"),
                         menuSubItem("Browse", "browse")
                ),
                menuItem("Widgets", tabName = "widgets")
    )
  ),
  dashboardBody(
    uiOutput('tab')
  )
)

## server ##

server <- function(input, output) {
  
  output$tab <- renderUI({
    paste("The selected tab is", input$sidebarmenu)
  })
  
  observeEvent(input$sidebarmenu, {
    req(input$sidebarmenu == "widgets")
    showModal(
      modalDialog(title = "You selected Widgets", "Or did you?")
    )
  })
}

shinyApp(ui, server)

提前非常感谢!

r shiny modal-dialog
1个回答
0
投票

这似乎可以解决问题:

server <- function(input, output) {
  showModal <- TRUE
  
  output$tab <- renderUI({
    paste("The selected tab is", input$sidebarmenu)
  })
  
  observeEvent(input$sidebarmenu, {
    req(input$sidebarmenu == "widgets")
    if (showModal) {
      showModal(
        modalDialog(title = "You selected Widgets", "Or did you?")
      )
      showModal <- FALSE
    }
  })
}
© www.soinside.com 2019 - 2024. All rights reserved.