微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 `renderMenu` 在闪亮闪亮的仪表板中动态添加带有操作按钮的额外 `sidebarMenu`?

如何解决如何使用 `renderMenu` 在闪亮闪亮的仪表板中动态添加带有操作按钮的额外 `sidebarMenu`?

这是我正在使用的代码

library(shiny)
library(shinydashboard)

header <- dashboardHeader(),sidebar <- dashboardSidebar(sidebarMenu(menuItem("Home",tabName = "home")),sidebarMenuOutput("menu"),actionButton('add_menu','Add Menu'))
body <- dashboardBody()

ui <- dashboardPage(header = header,body = body,sidebar = sidebar)

server <- function(input,output,session) {
  
  shinyInput <- function(name,id) paste(name,id,sep = "_")
  counter <- reactiveValues(counter_value = 0L)
  
  observeEvent(input$add_menu,{
    counter$counter_value <- counter$counter_value + 1L
  })
  
  observeEvent(input$add_menu,{
    output$menu <- renderMenu({
                        sidebarMenu(
                          menuItem(paste("Menu",counter$counter_value),value = shinyInput("new_menu",counter$counter_value)
                          ))
})
     
  })


}


shinyApp(ui = ui,server = server) 

目前当你按下actionButton时,首页标签下会出现一个菜单,之后每点击一次,这个菜单的名字就会增加1。这是因为output$menu是每次点击按钮 add_menu 都会被覆盖。相反,每次点击 add_menu 时,我都希望出现附加/新菜单,因此两次点击将有一个主页和两个菜单。三下点击将有一个主页和 3 个菜单等......我不确定如何实现这一点,我考虑使用 apply 系列函数之一但没有成功。此处的目标是单击侧边栏中的操作按钮,并向仪表板侧边栏添加其他菜单

解决方法

也许这会满足您的需求。

library(shiny)
library(shinydashboard)

header <- dashboardHeader()
sidebar <- dashboardSidebar(#sidebarMenu(menuItem("Home",tabName = "home")),sidebarMenuOutput(outputId = "dy_menu"),actionButton('add_menu','Add Menu'))
body <- dashboardBody()

ui <- dashboardPage(header = header,body = body,sidebar = sidebar)

server <- function(input,output,session) {
  menu_vals = reactiveValues(menu_list = NULL)
  counter <- reactiveValues(counter_value = 0L)
  
  output$dy_menu <- renderMenu({
    menu_list <- list(
      menuItem("Add Menu Items",tabName = "main",selected = TRUE),menu_vals$menu_list)
    sidebarMenu(.list = menu_list)
  })
  
  observeEvent(eventExpr = input$add_menu,handlerExpr = {
                 counter$counter_value <- counter$counter_value + 1L
                 menu_vals$menu_list[[length(menu_vals$menu_list) + 1]] <- menuItem(paste("Menu",counter$counter_value),tabName = paste0("Menu",counter$counter_value)) 
                 
               })
  
}

shinyApp(ui = ui,server = server) 

output

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。