本文介绍了R SHINY-导航到选项卡项时自动隐藏侧边栏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个闪亮的应用程序-这里有一个简化的示例-我希望当我导航到选项卡项时,侧边栏可以动态隐藏。事实上,用户将主要通过手机连接到该应用程序。
在贴子Hide sidebar in default in shinydashboard的帮助下,我知道当您进入应用程序时,默认情况下如何隐藏侧边栏,但在侧边栏始终显示之后。
以下是我的实际代码:
### Load librairies
library(shiny) ; library(shinydashboard) ; library(shinyjs)
library(dplyr)
### Load data
Weather <- c("cold", "rain", "snow","heat","sun")
Answer <- c("Take a coat","Take an umbrella","Take gloves","Take a swimsuit","Take solair cream")
Mydata <- data.frame( Weather, Answer, stringsAsFactors = FALSE)
remove(Weather, Answer)
### Shiny
Entete <- dashboardHeader(title = "My app")
BarreLaterale <- dashboardSidebar(
sidebarMenu(menuItem(text = "Home", tabName = "MyHome", icon = icon("home"))),
sidebarMenu(menuItem(text = "My search", tabName = "Search", icon = icon("search")))
)
Corps <- dashboardBody(
useShinyjs(),
tabItems(
tabItem(tabName = "MyHome",
fluidPage("Hello, welcome to the home page")
),
tabItem(tabName = "Search",
fluidRow(
box(title = "Weather choice", width = 6, solidHeader = TRUE, status = "danger",
selectInput(inputId = "WeatherChoice", label = NULL, choices = unique(Mydata$Weather))),
box(title = "Answer", width = 6, solidHeader = TRUE, status = "danger",
textOutput("ReturnAnswer"))
)
)
)
)
Interface <- dashboardPage(Entete, BarreLaterale, Corps, skin = "red")
### Server R
Serveur <- function(input, output, session) {
output$ReturnAnswer <- renderText({
as.character(Mydata %>% filter(Weather == input$WeatherChoice) %>% select(Answer))
})
addClass(selector = "body", class = "sidebar-collapse")
}
### Application
shinyApp(Interface, Serveur)
推荐答案
我添加了一个id
到您的sidebarmenu
(注意:您只需要一个sidebarmenu
有多个menuItems
)和一个observeEvent
来监听所选选项卡中的更改,使用id
:
### Load librairies
library(shiny) ; library(shinydashboard) ; library(shinyjs)
library(dplyr)
### Load data
Weather <- c("cold", "rain", "snow","heat","sun")
Answer <- c("Take a coat","Take an umbrella","Take gloves","Take a swimsuit","Take solair cream")
Mydata <- data.frame( Weather, Answer, stringsAsFactors = FALSE)
remove(Weather, Answer)
### Shiny
Entete <- dashboardHeader(title = "My app")
BarreLaterale <- dashboardSidebar(
sidebarMenu(id="mysidebar",
menuItem(text = "Home", tabName = "MyHome", icon = icon("home")),
menuItem(text = "My search", tabName = "Search", icon = icon("search")))
)
Corps <- dashboardBody(
useShinyjs(),
tabItems(
tabItem(tabName = "MyHome",
fluidPage("Hello, welcome to the home page")
),
tabItem(tabName = "Search",
fluidRow(
box(title = "Weather choice", width = 6, solidHeader = TRUE, status = "danger",
selectInput(inputId = "WeatherChoice", label = NULL, choices = unique(Mydata$Weather))),
box(title = "Answer", width = 6, solidHeader = TRUE, status = "danger",
textOutput("ReturnAnswer"))
)
)
)
)
Interface <- dashboardPage(Entete, BarreLaterale, Corps, skin = "red")
### Server R
Serveur <- function(input, output, session) {
output$ReturnAnswer <- renderText({
as.character(Mydata %>% filter(Weather == input$WeatherChoice) %>% select(Answer))
})
# this line is now actually obsolete.
addClass(selector = "body", class = "sidebar-collapse")
observeEvent(input$mysidebar,
{
# for desktop browsers
addClass(selector = "body", class = "sidebar-collapse")
# for mobile browsers
removeClass(selector = "body", class = "sidebar-open")
})
### Application
shinyApp(Interface, Serveur)
现在,每当您从一个选项卡切换到另一个选项卡时,侧边栏将再次隐藏。
希望这能有所帮助!
这篇关于R SHINY-导航到选项卡项时自动隐藏侧边栏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!