2017-10-11 2 views
0

Parfois, nous aimerions mettre du contenu dans un uiOutput/renderUI. Mais cela ne fonctionne pas toujours. Par exemple, l'exemple ci-dessous. Dans mon esprit, le code # 1 et le code # 2 devraient me donner la même interface graphique. Cependant, le code n ° 2 ne fonctionne pas comme prévu. Quelqu'un peut-il me dire la raison? Merci!renderUI dans R shiny n'affiche pas

Code # 1:

library(shiny) 

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

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

shinyApp(ui = ui, server = server) 

Code # 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) 

Répondre

1

Dans le second exemple, uiOutput enveloppe le contenu de navbarMenu dans un div avec la classe "shiny-html-output". Les Divs de cette classe ne sont cependant pas autorisés comme argument pour navbarPage. AFAIK, il y a deux façons de résoudre cela

Le premier est de créer l'ensemble navbarPage sur le côté serveur.

library(shiny) 

ui <- uiOutput("page") 

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

shinyApp(ui, server) 

L'autre est de ne créer que le contenu du tabPanel dans le serveur

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

Très utile. Merci @ Gregor de Cillia –