闪亮的仪表板:呈现多个菜单项并向每个菜单项输出动态内容 [英] Shiny Dashboard: Render multiple menu items and output dynamic content to each

查看:0
本文介绍了闪亮的仪表板:呈现多个菜单项并向每个菜单项输出动态内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要基于一些反应性数据值呈现各种菜单子项。对于每个子项,我还需要关联链接输出。我尝试链接tabName,但不确定出了什么问题。

下面是一个示例。所需的输出将是每个菜单项/子项的一个框。

## This code snippet doesn't do what I need ----
shinyApp(
  ui = dashboardPage(
    dashboardHeader(),
    dashboardSidebar(
      sidebarMenu(
        menuItemOutput("dynamic_menu"),
        menuItem("Menu2", tabName = "menu2")
      )
    ),
    dashboardBody(
      tabItems(
        uiOutput("menu1_content"),
        tabItem(tabName = "menu2", box("I am menu2"))
      )
    ),
    title = "Example"
  ),

  server = function(input, output) {
    output$dynamic_menu <- renderMenu({
      submenu_list <- lapply(letters[1:5], function(x) {
        menuSubItem(x, tabName = paste0("menu1-", x))
      })
      menuItem(
        text = "Menu1",
        startExpanded = TRUE,
        do.call(tagList, submenu_list)
      )
    })

    output$menu1_content <- renderUI({
      content_list <- lapply(letters[1:5], function(x) {
        tabItem(
          tabName = paste0("menu1-", x),
          box(x)
        )
      })
      do.call(tagList, content_list)
    })
  }
)


## This code snippet does what I need ----
shinyApp(
  ui = dashboardPage(
    dashboardHeader(),
    dashboardSidebar(
      sidebarMenu(
        menuItem(
          "Menu1", startExpanded = TRUE,
          menuSubItem("a", tabName = "menu1-a"),
          menuSubItem("b", tabName = "menu1-b"),
          menuSubItem("c", tabName = "menu1-c"),
          menuSubItem("d", tabName = "menu1-d"),
          menuSubItem("e", tabName = "menu1-e")
        ),
        menuItem("Menu2", tabName = "menu2")
      )
    ),
    dashboardBody(
      tabItems(
        tabItem(tabName = "menu1-a", box("a")),
        tabItem(tabName = "menu1-b", box("b")),
        tabItem(tabName = "menu1-c", box("c")),
        tabItem(tabName = "menu1-d", box("d")),
        tabItem(tabName = "menu1-e", box("e")),
        tabItem(tabName = "menu2", box("I am menu2"))
      ),
      title = "Example"
    )
  ),
  server = function(input, output) {}
)

推荐答案

回答我自己的问题,但如果你有更优雅的东西,请随时加入。

我认为我对闪亮仪表盘的初步理解是错误的,导致应用程序结构无效。

这里的诀窍是将id添加到sidebarMenu,以便稍后可以跟踪和解析页面焦点。然后,每个呈现函数将侦听输入并呈现相关内容。

shinyApp(
  ui = dashboardPage(
    dashboardHeader(),
    dashboardSidebar(
      sidebarMenu(
        id = "sidebar_menu",
        menuItemOutput("dynamic_menu"),
        menuItem("Menu2", tabName = "menu2")
      )
    ),
    dashboardBody(
      uiOutput("menu1_content"),
      uiOutput("menu2_content")
    ),
    title = "Example"
  ),
  server = function(input, output, session) {
    output$dynamic_menu <- renderMenu({
      menu_list <- lapply(letters[1:5], function(x) {
        menuSubItem(x, tabName = paste0("menu1-", x))
      })
      menuItem(
        text = "Menu1",
        startExpanded = TRUE,
        do.call(tagList, menu_list)
      )
    })

    output$menu1_content <- renderUI({
      sidebar_menu <- tstrsplit(input$sidebar_menu, "-")
      if (sidebar_menu[[1]] == "menu1") box(sidebar_menu[[2]])
    })

    output$menu2_content <- renderUI({
      sidebar_menu <- tstrsplit(input$sidebar_menu, "-")
      if (sidebar_menu[[1]] == "menu2") box("I am menu2")
    })
  }
)

这篇关于闪亮的仪表板:呈现多个菜单项并向每个菜单项输出动态内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆