单击Shiny中的按钮添加和删除tabPanel

时间:2016-05-10 16:53:19

标签: r shiny

我尝试设计一个Shiny应用,以便用户可以点击按钮添加或删除tabPanel。我已经能够使用下面的代码成功完成此操作,但是存在问题。每次用户点击Add L2Remove L2时,在下面的代码中,都会重新创建整个面板,从而重置每个tabPanel中的所有输入。这是有问题的,因为目标是让用户动态添加tabPanels并保存他们的输入。有没有办法做到这一点?

library(shiny)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(width = 3, fixed=T,
      h3("L2 Machine"),
      actionButton('moreL2', tags$b('Add L2')),
      actionButton('lessL2', tags$b('Remove L2')),
      uiOutput('panelset')
    ),
    mainPanel(
    )
  )
)

server <- function(input, output) {
  more <- reactiveValues(i=1)
  less <- reactiveValues(i=1)
  observe({
    input$moreL2
    isolate({
      more$i <- more$i + 1
    })
  })
  observe({
    input$lessL2
    isolate({
      less$i <- less$i + 1
    })
  })

  output$panelset <- renderUI({
    if(less$i > more$i) less$i <- more$i

    n <- seq(max(more$i - less$i + 1, 1))
    lapply(n, function(i) {
      tabPanel(
        title = paste0('Pan', i),
        numericInput(paste0('L2amount', i), 'Select L2 Amount', value = 0),
        selectInput(paste0('L2type', i), 'Select L2 Type', c('Percent', 'Absolute')),
        dateRangeInput(paste0('L2daterange',i), 'Select Adjustment Period', 
          start='01-01-2010', end='01-12-2015'))
    })
  })
}

shinyApp(ui, server)

0 个答案:

没有答案