我正在开发一个闪亮的应用程序,我在其中使用tabsetPanel
,这是在用户输入某些特定输入时生成的。因此,我想使用renderUI
函数使tabsetPanel显示/消失。
我现在的努力是 tabPanel
个元素(tabsetPanel
的参数)也取决于用户输入,顺便说一下:有时候我需要1个,有时我需要更多tabPanels
。
如何制作?我尝试在conditionPanel
参数中包含if()...
或包含简单tabsetPanel
条件,但它(并不奇怪......)不起作用。
答案 0 :(得分:67)
你走了。代码是相当自我解释的。
library(shiny)
runApp(list(
ui = pageWithSidebar(
headerPanel('Dynamic Tabs'),
sidebarPanel(
numericInput("nTabs", 'No. of Tabs', 5)
),
mainPanel(
uiOutput('mytabs')
)
),
server = function(input, output, session){
output$mytabs = renderUI({
nTabs = input$nTabs
myTabs = lapply(paste('Tab', 1: nTabs), tabPanel)
do.call(tabsetPanel, myTabs)
})
}
))
答案 1 :(得分:3)
有一种方法可以动态添加tabPanel 而不用 renderUI,这可能不像带有renderUI的版本那么明显。我编写了一个函数 addTabToTabset ,它将任何(list of)tabPanel附加到tabset / navbar。
这种方法比使用renderUI具有一组优点:
解决方案和代码示例可以在答案here中找到。如果需要,我也可以在这里发布代码。