如何使用 actionButton 打开菜单子项

Posted

技术标签:

【中文标题】如何使用 actionButton 打开菜单子项【英文标题】:How to open a menu SubItem with an actionButton 【发布时间】:2021-12-16 12:06:53 【问题描述】:

我正在开发我的第一个闪亮的应用程序,我想在 mainPage 上放置一些按钮,以重定向到我创建的菜单 subItens。

我尝试使用菜单 subItens 链接执行此操作,但没有成功。所以,我复制了我用来做菜单 subItens 的代码,并将它放在 actionButton 代码中。它运作良好,但只是在第一次点击时。我需要重新加载页面以使按钮再次工作。

你们知道怎么解决吗?

这里是 menuSubItem 代码

sidebarMenu( id = "tabs",
          menuItem("Conjuntura", tabName = "conjuntura", icon = icon("chart-bar"),
                   menuSubItem("Visão Geral",
                               tabName = "visao_geral"),
                   menuSubItem("Atividade Econômica",
                               tabName = "atividade_economica"),
dashboardBody(
        tabItems(
          # tab visão geral
          tabItem(
            tabName = "visao_geral",
            mod_conj_titulo_ui("titulo_ui_1")
          ),
          # tab conjuntura
          tabItem(
            tabName = "atividade_economica",
            mod_conj_atividade_economica_ui("atividade_economica_ui_1"),
            mod_conj_atividade_economica_es_ui("atividade_economica_es_ui_1")
            )

这是按钮代码

actionButton(inputId = "atividade_economica", 
                 label = menuSubItem(html("<br>Atividade<br>Econômica"),
                                     tabName = "atividade_economica", 
                                     icon = icon("chart-line", class = "icon")),
                 class = "button"
                 )

我没有在服务器中放置任何东西来运行按钮。我认为这就是问题所在。

【问题讨论】:

请发布MRE,以便我们重现该问题并展示您如何使用actionButton 【参考方案1】:

最简单的方法是依靠无论如何加载的bootstrap javascript 库来为您处理切换。因此,您只需在某处放置一个&lt;a&gt; 标记,该标记已正确设置了适当的data-toggledata-value 属性。

一些额外的 JavaScript 可以在菜单栏中正确突出显示选定的选项卡,从而使整个过程变得圆满:

library(shinydashboard)
library(shiny)

js <- HTML(paste("$(() => $('.mimic-menu').on('click', function() ",
                 "   const menu_item = $(this).data('value');",
                 "   const $parent = $('.sidebar-menu [data-value=\"' + menu_item + '\"]').closest('li');",
                 "   $('.sidebar-menu li').removeClass('active');",
                 "   $parent.addClass('active');",
                 "));", sep = "\n"))

header <- dashboardHeader()

sidebar <- dashboardSidebar(
   sidebarMenu(
      id = "tabs",
      menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
      menuItem("Widgets", icon = icon("th"), tabName = "widgets", badgeLabel = "new",
               badgeColor = "green"),
      menuItem("Charts", icon = icon("bar-chart-o"),
               menuSubItem("Sub-item 1", tabName = "subitem1"),
               menuSubItem("Sub-item 2", tabName = "subitem2")
      )
   )
)
body <- dashboardBody(
   tags$head(tags$script(js)),
   tabItems(
      tabItem("dashboard",
              div(p("Dashboard tab content"))
      ),
      tabItem("widgets",
              "Widgets tab content",
              tags$a(href = "#shiny-tab-dashboard", `data-toggle` = "tab",
                     class = "btn btn-default mimic-menu",
                     `data-value` = "dashboard", "Click to go to dashboard")
      ),
      tabItem("subitem1",
              "Sub-item 1 tab content",
              tags$a(href = "#shiny-tab-dashboard", `data-toggle` = "tab",
                     class = "btn btn-default mimic-menu",
                     `data-value` = "dashboard", "Click to go to dashboard")
      ),
      tabItem("subitem2",
              "Sub-item 2 tab content",
              tags$a(href = "#shiny-tab-dashboard", `data-toggle` = "tab",
                     class = "btn btn-default mimic-menu",
                     `data-value` = "dashboard", "Click to go to dashboard")
      )
   )
)

shinyApp(
   ui = dashboardPage(header, sidebar, body),
   server = function(input, output)  
)

说明

我们需要做的就是使用&lt;a&gt;标签,它设置属性data-toggle = "tab"data-value = &lt;name of the tab we want to switch to&gt;。 然后,bootstrap 会自动为我们进行切换。 但是,这会导致侧边栏中最后一个选择的菜单项突出显示的不干净状态,即使我们切换了选项卡也是如此。 因此,我们添加了一些自定义 JavaScript,它们会在点击自制链接时做出反应,以在侧边栏菜单中选择正确的项目。 为了使链接具有按钮的外观和感觉,我们添加了btnbtn-default 类。 mimic-menu 类是功能性的,允许触发上述代码。

截图

【讨论】:

谢谢!不幸的是,它没有用。该按钮有效,但会打开一个空白链接。 好吧,如果没有一个最小的工作示例,就很难说清楚。我展示的示例至少可以在我的 PC 上运行。我将添加一个 gif 来显示。 感谢您的帮助。我在这方面真的很陌生,我还在学习如何做事。

以上是关于如何使用 actionButton 打开菜单子项的主要内容,如果未能解决你的问题,请参考以下文章

如何处理支持触摸和指针事件的设备上的触摸事件,其菜单包含不是父菜单的子项的子项

带有列表子项可聚焦android的列表视图上下文菜单

MenuStrip控件中如何用代码的方式添加二级菜单,想在编辑菜单下添加子项,怎么添加?

单击子项后侧边菜单关闭

模块化和 SelectInput 使 actionButton 重复

如何隐藏其子项被隐藏的菜单?