【发布时间】:2019-10-22 20:08:36
【问题描述】:
我正在创建一个应用程序,用户可以通过单击专用于它的 tabPanel 来创建新的 tabPanels。我知道该怎么做,但我不知道如何用反应数字命名 tabPanels。
为了更清楚,这里有一个可重现的例子:
library(shiny)
library(shinyWidgets)
ui <- navbarPage(position = "static-top",
title = "foo",
id = "tabs",
tabPanel(title = "Name 1",
fluidRow()),
tabPanel(title = "More",
icon = icon("plus"),
fluidRow()
)
)
server <- function(input, output) {
count <- reactive({
i <- 1
if (input$tabs == "More"){
i <- i + 1
}
else {i <- i}
i
})
observeEvent(input$tabs, {
id = paste0("Name ", count())
if (input$tabs == "More")
appendTab(inputId = "tabs",
tabPanel(title = id,
fluidRow(column(
width = 12))
),
select = TRUE)
})
}
shinyApp(ui = ui, server = server)
如您所见,单击 tabPanel More 会创建一个新的 tabPanel。我希望 tabPanel 的名称采用“名称 i”的形式,其中“i”是现有的 tabPanel 的数量(- 1 因为我不想考虑 tabPanel More 和 + 1 以防止出现开始时相同数字的两倍)。因此,我需要这个“i”是响应式的,因为它必须考虑到用户创建的 tabPanel。
在我的代码中,您可以看到我尝试通过计算 tabPanel More 上的点击次数来计算 tabPanel 的数量,但这不起作用。我看到了this post,但我不知道如何修改它,因为我从未使用过 JavaScript。
有人有解决办法吗?
【问题讨论】: