2017-12-15 83 views
5

में नेविगेट करते हैं तो साइडबार को स्वचालित रूप से छुपाएं मेरे पास एक चमकदार ऐप है - यहां सरलीकृत उदाहरण है - और मैं टैब आइटम में नेविगेट करते समय साइडबार गतिशील रूप से छिपाना चाहता हूं। वास्तव में उपयोगकर्ता मुख्य रूप से अपने मोबाइल के साथ ऐप से कनेक्ट होंगे।आर चमकदार - जब आप टैब आइटम

Hide sidebar in default in shinydashboard पोस्ट की सहायता से, मुझे पता है कि ऐप पर आने पर साइडबार डिफ़ॉल्ट रूप से कैसे छिपाना है, लेकिन साइडबार हमेशा प्रदर्शित होने के बाद। चयनित टैब में परिवर्तन को सुनने के लिए, का उपयोग कर, और एक observeEvent:

### 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) 

उत्तर

1

मैं अपने sidebarmenu के लिए एक id जोड़ा (आप केवल कई menuItems के साथ एक sidebarmenu जरूरत नोट:)

यहाँ मेरी वास्तविक कोड है कि 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) 

अब, किसी भी समय आप एक टैब से दूसरे करने के लिए स्विच, साइडबार फिर से छिपा हुआ है।

आशा है कि इससे मदद मिलती है!

+0

अतिरिक्त टिप्पणी: मेरे ऐप को प्रकाशित करने के बाद, व्यवहार तब अच्छा होता है जब मैं अपने पीसी से ब्राउज़र का उपयोग करता हूं लेकिन जब मैं अपने मोबाइल से ब्राउज़र का उपयोग नहीं करता। कोई उपाय ? https://salsapedia.shinyapps.io/TestApp/ – Kumpelka

+1

मैंने मोबाइल ब्राउज़र पर पृष्ठ का निरीक्षण किया, और ऐसा लगता है कि उपयोग की जाने वाली कक्षाएं ब्राउज़र की चौड़ाई पर निर्भर करती हैं। इसलिए मैंने छोटी-चौड़ाई वाले ब्राउज़र से निपटने के लिए 'removeClass (selector = "body", class = "sidebar-open")' पंक्ति को जोड़ा, मुझे उम्मीद है कि यह आपकी समस्या हल करेगी। – Florian

संबंधित मुद्दे