在下面的示例中,有两个menuItem
s(1和2)和一个menuSubItem
(2.1)嵌套在menuItem
内。每个menuItem
都有一个相应的tabItem
带有box
,其中boxtitle是menuItem的名称。如果我运行此应用程序,则会初始选择“菜单1”,并显示名为“1”的box
。如果我点击“菜单2”,menuSubItem
会展开,但身体根本不会改变。
我不认为这是正常的行为,有没有办法解决这个问题?
还有第二个问题。如果我选择了“菜单2.1”并单击“菜单1”,为什么嵌套的menuItem
不会再次崩溃?
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(disable=TRUE),
dashboardSidebar(
sidebarMenu(
menuItem(
"Menu 1",
tabName="menu1"
),
menuItem(
"Menu 2",
tabName = "menu2",
menuSubItem(
"Menu 2.1",
tabName = "menu2_1"
)
)
)
),
dashboardBody(
tabItems(
tabItem(tabName="menu1",
box("1")
),
tabItem(tabName="menu2",
box("2")
),
tabItem(tabName="menu2_1",
box("2.1")
)
)
)
)
server <- function(input, output) {
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
您看到的行为是正常的,请参阅here
- Childless menuItem()s / menuSubItem()s必须赋予tabName参数
- Childfull“menuItem()s不能有tabName或选定的参数 (或者更确切地说,他们可以,但Shiny会完全忽略这一点)。 相反,最多其中一个可以采用startExpanded = TRUE,即 告诉Shiny开始使用menuItem()展开,即揭示 所有的孩子
您可以使用下面的代码访问展开的选项卡,这样您就可以基于此创建行为,但我不认为在单击包含子项的menuItem时可以显示页面。
希望这有帮助!
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(disable=TRUE),
dashboardSidebar(
sidebarMenu(
menuItem(
"Menu 1",
tabName="menu1"
),
menuItem(
"Menu 2",
expandedName = "menu2",
menuItem(
"Menu 2.1",
tabName = "menu2_1"
)
)
),
textOutput('selectedmenu')
),
dashboardBody(
tabItems(
tabItem(tabName="menu1",
box("1")
),
tabItem(tabName="menu2",
box("2")
),
tabItem(tabName="menu2_1",
box("2.1")
)
)
)
)
server <- function(input, output) {
output$selectedmenu <- renderText({
print(input$sidebarItemExpanded)
})
}
shinyApp(ui = ui, server = server)
展开菜单2时更改第一个标签,请求评论:
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(disable=TRUE),
dashboardSidebar(
sidebarMenu(id="mysidebar",
menuItem(
"Menu 1",
tabName="menu1"
),
menuItem(
"Menu 2",
expandedName = "menu2",
menuItem(
"Menu 2.1",
tabName = "menu2_1"
)
)
)
),
dashboardBody(
tabItems(
tabItem(tabName="menu1",
box("1")
),
tabItem(tabName="menu2",
box("2")
),
tabItem(tabName="menu2_1",
box("2.1")
)
)
)
)
server <- function(input, output,session) {
observeEvent(input$sidebarItemExpanded, {
updateTabItems(session,"mysidebar","menu2_1")
})
}
shinyApp(ui = ui, server = server)