2017-10-11 276 views
0

有时我们想将内容放在uiOutput/renderUI中。但这并不总是奏效。例如,下面的例子。在我看来,代码#1和代码#2应该给我相同的GUI。但是,代码#2不能按预期工作。谁能告诉我理由?谢谢!R闪亮的renderUI不显示

代码#1:

library(shiny) 

ui <- navbarPage("test", 
       navbarMenu("More", 
          tabPanel("Table" 
          ) 
       ) 
) 

server <- shinyServer(function(input, output, session) { 
}) 

shinyApp(ui = ui, server = server) 

代码#2:

library(shiny) 

ui <- navbarPage("test", 
      uiOutput("ui_data") 
) 

server <- shinyServer(function(input, output, session) { 

    output$ui_data <- renderUI({ 
    navbarMenu("More", 
       tabPanel("Table" 
       ) 
    ) 
    }) 

}) 

shinyApp(ui = ui, server = server) 

回答

1

在第二示例中,uiOutput包装的navbarMenu一个div内部与类"shiny-html-output"的内容。然而这个类的Div不允许作为navbarPage的参数。 AFAIK,有两种方法可以解决这个问题

第一个是在服务器端创建整个navbarPage

library(shiny) 

ui <- uiOutput("page") 

server <- shinyServer(function(input, output, session) { 
    output$page <- renderUI({ 
    navbarPage("test", navbarMenu("More", tabPanel("Table"))) 
    }) 
}) 

shinyApp(ui, server) 

另一种是只在服务器

library(shiny) 

ui <- navbarPage(
    "test", 
    navbarMenu("More", tabPanel("Table", uiOutput("tab_content"))) 
) 

server <- shinyServer(function(input, output, session) { 
    output$tab_content <- renderUI({ 
    "Some content" 
    }) 
}) 

shinyApp(ui = ui, server = server) 
+0

非常有用创建tabPanel的内容。谢谢@ Gregor de Cillia –