【问题标题】:R Shiny Dashboard - Custom Dropdown Menu In HeaderR Shiny Dashboard - 标题中的自定义下拉菜单
【发布时间】:2017-10-04 00:59:32
【问题描述】:

从闪亮的仪表板 github 中,我收集到可以在标题的右上角创建下拉菜单,但只有 3 种“类型”(消息、通知和任务)。

https://rstudio.github.io/shinydashboard/structure.html#structure-overview

是否有创建自定义下拉菜单的方法?我想创建一个设置下拉菜单,在其中为用户提供一些复选框,他们可以使用这些复选框以各种方式调整仪表板(显示/隐藏内容、过滤数据等)

【问题讨论】:

    标签: r shiny shinydashboard


    【解决方案1】:

    我自定义了三种菜单中的一种来实现这一点。然后,您可以为项目添加 actionItem(s)。 tabSelect 属性为真时模拟sidebarMenuItem 的选择。

    dropdownActionMenu <- function (..., title=NULL, icon = NULL, .list = NULL, header=NULL) {
      items <- c(list(...), .list)
      lapply(items, shinydashboard:::tagAssert, type = "li")
      type <- "notifications" # TODO créer action + CSS
      dropdownClass <- paste0("dropdown ", type, "-menu")
      tags$li(class = dropdownClass, a(href = "#", class = "dropdown-toggle",
        `data-toggle` = "dropdown", icon, title), tags$ul(class = "dropdown-menu",
        if(!is.null(header)) tags$li(class="header",header),
        tags$li(tags$ul(class = "menu", items))))
    }
    
    actionItem = function (inputId, text, icon = NULL, tabSelect=FALSE) {
      if(!is.null(icon)) {
        shinydashboard:::tagAssert(icon, type = "i")
        icon <- tagAppendAttributes(icon, class = paste0("text-", "success"))
      }
      if(tabSelect) {
        tags$li(a(onclick=paste0("shinyjs.tabSelect('",inputId,"')"),icon,text))
      } else {
        tags$li(actionLink(inputId,text,icon))
      }
    }
    

    用于选择标签的javascript函数(在正文中的useShinyjs()之后插入)

    extendShinyjs(text="shinyjs.tabSelect=function(tabName){$('a[data-value='+tabName+']').click();}")
    

    示例代码

    dashboardHeader(
      dropdownActionMenu(title="test",
        actionItem("mnuFirst","First"),
        actionItem("mnuSecond","Second")
      )
    )
    

    【讨论】:

    • 谢谢!我最终将它放在侧边栏中的菜单项中,但我必须尝试一下。
    • 这是通用下拉菜单的绝佳解决方案。如何更改 actionItem 的宽度?现在我有一个有点宽的下拉列表,我想让它更窄。
    【解决方案2】:

    Shiny Dashboard 基于admin LTE。因此,现有的下拉菜单类型是为管理员 LTE 用例设计的,这与许多 Shiny 应用程序的使用有很大不同。

    如果管理员 LTE 中甚至不提供某些内容,那么 Shiny 仪表板中不太可能支持它。

    对于您的具体问题,您可以输入some controls in the side bar。另一种可能是使用the wrench icon in box,它还没有在 Shiny 中实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2011-02-06
      相关资源
      最近更新 更多