首页 > 解决方案 > 如何在闪亮的应用程序中禁用 modalDialog 的反应性

问题描述

我有一个闪亮的应用程序,其中包含一个模态对话框弹出窗口。我只想在我操作一个动作按钮时才显示信息弹出窗口。我添加了一个reactiveEvent()但似乎不起作用我不想将 ShinyBS 包用于某些公司约束谢谢你的帮助

应用程序代码:

library(shiny)

ui <-  shinyUI(fluidPage(
  titlePanel("Example"),
  sidebarLayout(
    sidebarPanel(
      selectInput("decision", label = "Choose your species", 
                  choices = unique(iris$Species), 
                  selected = unique(iris$Species), multiple = TRUE),
      actionButton("show", "Show")
    ),
    mainPanel(
      uiOutput('mytabs')
    )
  )
))

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

  output$mytabs <- renderUI({
    nTabs <- length(input$decision)
    # create tabPanel with datatable in it
    myTabs <- lapply(seq_len(nTabs), function(i) {
      tabPanel(paste0("dataset_", input$decision[i]),
               tableOutput(paste0("datatable_",i))       
      )
    })

    showModal(
      modalDialog(
        do.call(tabsetPanel, myTabs)
      )
    )
  })

  # create datatables in popup ?
  observe(
    lapply(seq_len(length(input$decision)), function(i) {
      output[[paste0("datatable_",i)]] <- renderTable({
        as.data.frame(iris[iris$Species == input$decision[i], ])
      })
    })  
  ) 

})

shinyApp(ui, server)

标签: rshiny

解决方案


我修改了你的服务器代码。mytabs请注意,由于数据表具有相同的 ID ,因此您不能在模式对话框和模式对话框中显示数据表。

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

    myTabs <- reactive({
        nTabs <- length(input$decision)
        # create tabPanel with datatable in it
        myTabs <- lapply(seq_len(nTabs), function(i) {
            tabPanel(paste0("dataset_", input$decision[i]),
                     tableOutput(paste0("datatable_",i))       
            )
        })

        myTabs
    })

    # output$mytabs <- renderUI(myTabs())

    observeEvent(input$show,{
        print(myTabs())
        showModal(
            modalDialog(
                do.call(tabsetPanel, myTabs())
            )
        )
        lapply(seq_len(length(input$decision)), function(i) {
            output[[paste0("datatable_",i)]] <- renderTable({
                as.data.frame(iris[iris$Species == input$decision[i], ])
            })
        })


    })

})

推荐阅读