R shinydashboard动态菜单选择
R shinydashboard dynamic menu selection
我在 R shinydashboard 中创建了动态 sibebar 菜单。即使我使用 selected = TRUE
,在此动态模式下启动时也不会选择与菜单关联的菜单项。
如何确保我可以控制在此动态模式下启动时显示哪个 menuItem 的内容?
我一直在搜索类似的帖子。到目前为止找不到任何有用的东西。 updateTabItems()
似乎没有用。
有什么想法吗?
提前致谢。
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Dynamic sidebar"),
dashboardSidebar(
sidebarMenuOutput("menu")
),
dashboardBody(
tabItems(
tabItem(tabName = "m1", p("Menu content 1") ),
tabItem(tabName = "m2", p("Menu content 2") )
)
)
)
server <- function(input, output) {
output$menu <- renderMenu({
sidebarMenu(
menuItem("Menu item1", tabName="m1", icon = icon("calendar")),
menuItem("Menu item2", tabName="m2", icon = icon("database"),selected = TRUE)
)
})
}
shinyApp(ui, server)
编辑:Romain 的答案出现缩进问题
您已经有效地使用了updateTabItems()
。为此,您必须为 sidebarMenu
设置一个 id 并更新相应的 menuItem
或 menuSubItem
.
对于您的具体情况,您应该这样做:
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Dynamic sidebar"),
dashboardSidebar(
sidebarMenu(id="tabs",
sidebarMenuOutput("menu")
)
),
dashboardBody(
tabItems(
tabItem(tabName = "m1", p("Menu content 1") ),
tabItem(tabName = "m2", p("Menu content 2") )
)
)
)
server <- function(input, output,session) {
output$menu <- renderMenu({
sidebarMenu(
menuItem("Menu item1", tabName="m1", icon = icon("calendar")),
menuItem("Menu item2", tabName="m2", icon = icon("database"))
)
})
isolate({updateTabItems(session, "tabs", "m2")})
}
shinyApp(ui, server)
删除缩进问题的编辑版本
为什么不使用只在应用程序初始化时调用一次的观察器
observe({ # called only once at app init
updateTabItems(session, "tabs", "m2")
})
我在 R shinydashboard 中创建了动态 sibebar 菜单。即使我使用 selected = TRUE
,在此动态模式下启动时也不会选择与菜单关联的菜单项。
如何确保我可以控制在此动态模式下启动时显示哪个 menuItem 的内容?
我一直在搜索类似的帖子。到目前为止找不到任何有用的东西。 updateTabItems()
似乎没有用。
有什么想法吗? 提前致谢。
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Dynamic sidebar"),
dashboardSidebar(
sidebarMenuOutput("menu")
),
dashboardBody(
tabItems(
tabItem(tabName = "m1", p("Menu content 1") ),
tabItem(tabName = "m2", p("Menu content 2") )
)
)
)
server <- function(input, output) {
output$menu <- renderMenu({
sidebarMenu(
menuItem("Menu item1", tabName="m1", icon = icon("calendar")),
menuItem("Menu item2", tabName="m2", icon = icon("database"),selected = TRUE)
)
})
}
shinyApp(ui, server)
编辑:Romain 的答案出现缩进问题
您已经有效地使用了updateTabItems()
。为此,您必须为 sidebarMenu
设置一个 id 并更新相应的 menuItem
或 menuSubItem
.
对于您的具体情况,您应该这样做:
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Dynamic sidebar"),
dashboardSidebar(
sidebarMenu(id="tabs",
sidebarMenuOutput("menu")
)
),
dashboardBody(
tabItems(
tabItem(tabName = "m1", p("Menu content 1") ),
tabItem(tabName = "m2", p("Menu content 2") )
)
)
)
server <- function(input, output,session) {
output$menu <- renderMenu({
sidebarMenu(
menuItem("Menu item1", tabName="m1", icon = icon("calendar")),
menuItem("Menu item2", tabName="m2", icon = icon("database"))
)
})
isolate({updateTabItems(session, "tabs", "m2")})
}
shinyApp(ui, server)
删除缩进问题的编辑版本
为什么不使用只在应用程序初始化时调用一次的观察器
observe({ # called only once at app init
updateTabItems(session, "tabs", "m2")
})