我尝试设计一个Shiny应用,以便用户可以点击按钮添加或删除tabPanel
。我已经能够使用下面的代码成功完成此操作,但是存在问题。每次用户点击Add L2
或Remove 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)