我对 R 和 Shiny 都是新手。我试图在
tabPanel
文件中创建 server.R
但没有成功,我认为这是因为在 uiContent
中使用 navbarPage
来获取 tabPanel
时出现错误。
这是我的
ui.R
:
shinyUI(
navbarPage(
"test", id = "nav", collapsible = TRUE, position = "fixed-top",
# needed to keep fixed-top navbar from obscuring content
header = tags$style(type="text/css", "body {padding-top: 70px;}"),
uiOutput("content")
)
)
这是
server.R
:
function(input, output) {
output$content <- renderUI({
tabPanel("tabA")
})
}
我的创可贴解决方案是在
navbarPage
中包含 renderUI
函数,但我想知道是否有某种方法可以在 server.ui
文件中呈现选项卡,同时在 navbarPage
文件中保留 ui.R
.
经过长时间的研究,我认为这是不可能的。
当在初始设置中调用
navbarPage
时,它会为输入列表提供给它的所有 tabPanels
创建超链接和占位符。 (请参阅下面的链接。)由 uiOutput
注入的任何进一步添加都不会执行此操作,因为定义 navbarPage
(而不是内容)的 HTML 上下文在启动后已修复。任何注入只会影响选项卡中显示的内容。
你可以说,
shinyUI
不知道shinyServer所具有的反应性。但是,由于 Shiny 中的反应性意味着快速重新评估,因此通过 shinyServer
重建 UI 似乎是构建动态 navbarPages
的合法“Shiny”方式。
如果您仍然不满意,您可以搜索此页面:Shiny Bootstrap Definitions。特别是在第 306-389 行 (
navbarPage
) 和 689-834 (buildTabset
) 中,您可以阅读实际的函数定义。也许您可以模仿这些并添加额外的实用程序以使其正常工作。
我遇到了同样的问题,下面的代码有效。尝试将 tabPanel 留在用户界面中,并在服务器中渲染其余部分(假设您想要一个流畅的页面),如下所示。
shinyUI(
navbarPage(
"test", id = "nav", collapsible = TRUE, position = "fixed-top",
# needed to keep fixed-top navbar from obscuring content
header = tags$style(type="text/css", "body {padding-top: 70px;}"),
tabPanel("tabA",
uiOutput("content"))
)
)
function(input, output) {
output$content <- renderUI({
fluidPage("tabA content")
})
}