【问题标题】:shinydashboard: menuSubItem not rendering at start in case of several menuSubItemsshinydashboard:如果有多个 menuSubItem,则 menuSubItem 不会在开始时呈现
【发布时间】:2018-10-08 16:01:39
【问题描述】:

我发现如果有多个(多个)tabItem,menuSubItem 内容不会呈现。

演示此行为的最小示例如下。

所需的行为是在启动时显示标记为selected = TRUE 的tabItem 的内容。现在,只有在侧边栏中的 menuSubItems 之间切换后才会显示内容。

我怎样才能让它工作?

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "MINIMAL EXAMPLE"),
  dashboardSidebar(
    sidebarMenuOutput("menu")
  ),
  dashboardBody(
    uiOutput("body")
  )
)

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

  output$menu <- renderMenu(
    sidebarMenu(
        menuItem(text = "TABS", tabName = "TABS", startExpanded = T,
                 menuSubItem(text = "tab1", tabName="tab1",
                             icon = icon("cube"), selected = TRUE),
                 menuSubItem(text = "tab2", tabName="tab2",
                             icon = icon("cube"), selected = FALSE)
        )
   )
  )

  output$body <- renderUI({
    tabItems(
      tabItem(tabName = "tab1", 
              h4("MY TEXT 1")
      ),
      tabItem(tabName = "tab2", 
              h4("MY TEXT 2")
      ))
  })
}

shinyApp(ui = ui, server = server)

【问题讨论】:

标签: r shiny shinydashboard


【解决方案1】:

确实,将 ui 元素直接放在 UI 中可以解决这个问题。 但是将所有内容放在 ui 中的方法仅限于不涉及使用反应值的情况。据我了解,将响应值从服务器传递到 ui 通常是不可能的(或仅限于特殊情况)。如果我错了,请纠正...谢谢

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "MINIMAL EXAMPLE"),
  dashboardSidebar(
    sidebarMenuOutput("menu")
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName = "tab1", 
              h4("MY TEXT 1")
      ),
      tabItem(tabName = "tab2", 
              h4("MY TEXT 2")
      ))
  )
)

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

  output$menu <- renderMenu(
    sidebarMenu(
        menuItem(text = "TABS", tabName = "TABS", startExpanded = T,
                 menuSubItem(text = "tab1", tabName="tab1",
                             icon = icon("cube"), selected = TRUE),
                 menuSubItem(text = "tab2", tabName="tab2",
                             icon = icon("cube"), selected = FALSE)
        )
    )
  )
}

shinyApp(ui = ui, server = server)

【讨论】:

    【解决方案2】:

    将您的输出重命名为“body”以外的名称会有所帮助 - 请参阅 this

    library(shiny)
    library(shinydashboard)
    
    ui <- dashboardPage(
      dashboardHeader(title = "MINIMAL EXAMPLE"),
      dashboardSidebar(
        sidebarMenuOutput("menu")
      ),
      dashboardBody(
        uiOutput("myBodyOutput")
      )
    )
    
    server <- function(input, output, session) {
      
      output$myBodyOutput <- renderUI({
        tabItems(
          tabItem(tabName = "tab1", 
                  h4("MY TEXT 1")
          ),
          tabItem(tabName = "tab2", 
                  h4("MY TEXT 2")
          ))
      })
      
      output$menu <- renderMenu(
        sidebarMenu(id = "sidebarID",
                    menuItem(text = "TABS", tabName = "TABS", startExpanded = T,
                             menuSubItem(text = "tab1", tabName="tab1",
                                         icon = icon("cube"), selected = TRUE),
                             menuSubItem(text = "tab2", tabName="tab2",
                                         icon = icon("cube"), selected = FALSE)
                    )
        )
      )
      
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 2016-11-17
      • 2020-10-27
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多