【问题标题】:How to disable reactivity for modalDialog in shiny app如何在闪亮的应用程序中禁用 modalDialog 的反应性
【发布时间】:2019-09-18 05:54:06
【问题描述】:

我有一个闪亮的应用程序,其中包含一个模态对话框弹出窗口。 我只想在我操作一个动作按钮时显示信息弹出窗口。 我添加了一个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)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我修改了你的服务器代码。请注意,您不能同时在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], ])
                })
            })
    
    
        })
    
    })
    

    【讨论】:

    • 非常感谢我正在寻找的东西
    猜你喜欢
    • 2017-07-27
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2013-07-08
    • 2021-05-25
    • 1970-01-01
    • 2015-06-23
    相关资源
    最近更新 更多