Сделайте это shinyjs
. Посмотрите, как я это делаю, по addClass
removeClass
, проверьте.
Левая правая панель закрыта, когда вы находитесь на «Front» и открыта на вкладке «Data».
## app.R ##
library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(DT)
library(shinyWidgets)
library(shinyjs)
ui <- dashboardPagePlus(
dashboardHeaderPlus(
enable_rightsidebar = TRUE,
rightSidebarIcon = "gears",
fixed = T
),
dashboardSidebar(
),
dashboardBody(
useShinyjs(),
tags$hr(),
tabsetPanel(
id ="tabA",
type = "tabs",
tabPanel("Front",icon = icon("accusoft")),
tabPanel("Data", icon = icon("table")
)
)
),
rightsidebar = rightSidebar(
)
)
server <- function(input, output) {
observe({
if (input$tabA == "Front") {
addClass(selector = "body", class = "sidebar-collapse")
removeClass(selector = "body", class = "control-sidebar-open")
} else {
removeClass(selector = "body", class = "sidebar-collapse")
addClass(selector = "body", class = "control-sidebar-open")
}
})
}
shinyApp(ui = ui, server = server)
Чтобы ответить на ваш дополнительный вопрос в комментарии:
- Я проверил документ, для правого меню боковой панели нет идентификатора, поэтому я не могу использовать блестящие функции для измените его, если только вы не измените исходный код
shinydashboardPlus
, чтобы дать ему идентификатор при инициации, но это будет очень сложно. - Я добавлю немного javascript
runjs
, чтобы скрытно скрыть правую сторону меню и добавьте кнопку «Фронт». Когда вы щелкнете по нему, появится правая панель.
## app.R ##
library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(DT)
library(shinyWidgets)
library(shinyjs)
ui <- dashboardPagePlus(
dashboardHeaderPlus(
enable_rightsidebar = TRUE,
fixed = T
),
dashboardSidebar(
),
dashboardBody(
useShinyjs(),
tags$hr(),
tabsetPanel(
id ="tabA",
type = "tabs",
tabPanel(title = "Front", icon = icon("accusoft"),
actionButton(inputId = "openright", label = "Open Right")
),
tabPanel("Data", icon = icon("table")
)
)
),
rightsidebar = rightSidebar(
)
)
server <- function(input, output) {
observe({
runjs('document.querySelectorAll(".navbar-custom-menu")[1].style.visibility = "hidden"')
if (input$tabA == "Front") {
addClass(selector = "body", class = "sidebar-collapse")
removeClass(selector = "body", class = "control-sidebar-open")
} else {
removeClass(selector = "body", class = "sidebar-collapse")
addClass(selector = "body", class = "control-sidebar-open")
}
})
observeEvent(input$openright, {addClass(selector = "body", class = "control-sidebar-open")})
}
shinyApp(ui = ui, server = server)