简体   繁体   English

shinydashboard:使用 uiOutput 时获取特定的默认页面

[英]shinydashboard : getting specific default page while using uiOutput

I was making reactive shiny web page and stucked at the code below.我正在制作反应式 shiny web 页面并停留在下面的代码中。

library(shiny)
library(shinydashboard)

ui = dashboardPage(
  dashboardHeader(title = "header"),
  dashboardSidebar(
    sidebarMenuOutput("sideBar")),
  dashboardBody(
    uiOutput("test")
  )
)

server = shinyServer(function(input, output, session) { 
  output$sideBar <- renderMenu({
    sidebarMenu(id = "menu",
                menuItem("Dashboard", tabName ="dashboard", icon = icon('dashboard')),
                menuItem("DBcentor", tabName ="dbcenter", icon = icon('database'))
    )
  }) 
  output$test <- renderUI ({
    tabItems(
      tabItem(tabName = "dashboard", uiOutput("dashboardbody")),
      tabItem(tabName = "dbcenter", uiOutput("dbcenterbody"))
    )
  })
  output$dashboardbody <- renderUI ({
    box("Dashboard Body")
  })
  output$dbcenterbody <- renderUI ({
    box("Dbcenter Body")
  })
  
})

shinyApp(ui, server)

I used uiOutput to build body but after shiny app is loaded, nothing comes out at the dashboard page.我使用uiOutput构建主体,但在加载 shiny 应用程序后,仪表板页面上没有任何内容。

I changed my code like this,我像这样更改了我的代码,

library(shiny)
library(shinydashboard)

ui = dashboardPage(
  dashboardHeader(title = "header"),
  dashboardSidebar(
    sidebarMenuOutput("sideBar")),
  dashboardBody(
    tabItems(
      tabItem(tabName = "dashboard", uiOutput("dashboardbody")),
      tabItem(tabName = "dbcenter", uiOutput("dbcenterbody"))
    )
  )
)

server = shinyServer(function(input, output, session) { 
  output$sideBar <- renderMenu({
    sidebarMenu(id = "menu",
                menuItem("Dashboard", tabName ="dashboard", icon = icon('dashboard')),
                menuItem("DBcentor", tabName ="dbcenter", icon = icon('database'))
    )
  }) 
  output$dashboardbody <- renderUI ({
    box("Dashboard Body")
  })
  output$dbcenterbody <- renderUI ({
    box("Dbcenter Body")
  })
  
})

shinyApp(ui, server)

Of course it works and box("dashboadbody") comes out at the first page.当然它有效,并且box("dashboadbody")出现在第一页。

I want to use uiOutput because i should use input data to build menus and items.我想使用uiOutput因为我应该使用input data来构建菜单和项目。 Any ways to use uiOutput and get box("dashboard") on the default page at the same time?有什么方法可以同时在默认页面上使用uiOutput和 get box("dashboard")

Try this尝试这个

ui = dashboardPage(
  dashboardHeader(title = "header"),
  dashboardSidebar(
    sidebarMenuOutput("sideBar")),
  dashboardBody(
    uiOutput("test")
  )
)

server = shinyServer(function(input, output, session) { 
  output$sideBar <- renderMenu({
    sidebarMenu(id = "menu",
                menuItem("Dashboard", tabName ="dashboard", icon = icon('dashboard')),
                menuItem("DBcentor", tabName ="dbcenter", icon = icon('database'))
    )
  }) 
  
  output$dashboardbody <- renderUI ({
    box("Dashboard Body")
  })
  output$dbcenterbody <- renderUI ({
    box("Dbcenter Body")
  })
  updateTabItems(session,"menu","dbcenter")
  updateTabItems(session,"menu","dashboard")
  
  output$test <- renderUI ({
    tagList(
      tabItems(
        tabItem(tabName = "dashboard", uiOutput("dashboardbody")),
        tabItem(tabName = "dbcenter", uiOutput("dbcenterbody"))
      ))
  })
})

shinyApp(ui, server)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM