2017-09-30 4 views
0

In einem shinydashboard mit mehreren Registerkarten wie hierIn regelmäßigen Abständen wechseln Registerkarte in shinydashboard

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(title = "Sample Shiny"), 
    dashboardSidebar(
    sidebarMenu(
     menuItem("Tab 1", tabName = "tab1"), 
     menuItem("Tab 2", tabName = "tab2") 
    ) 
), 
    dashboardBody(
    tabItems(
     tabItem(
     "tab1", 
     fluidRow(
      box(title = "Foo") 
     ) 
    ), 
     tabItem(
     "tab2", 
     fluidRow(
      box(title = "Bar") 
     ) 
    ) 
    ) 
) 
) 

server <- function(input, output) { } 

shinyApp(ui = ui, server = server) 

ist es möglich, in regelmäßigen Abständen die Anwendung wechselt die aktiven Registerkarte zu lassen? Ich möchte das Dashboard auf meinem Bildschirm haben und den aktiven Tab alle x Minuten wechseln.

Ich habe bereits die Shiny Dokumente für eine Lösung überprüft, aber keine passende Funktion gefunden. Aber vielleicht habe ich einfach ein solches Feature übersehen. Wenn Shiny kein geeignetes Feature bietet, ist es möglich, ein benutzerdefiniertes JavaScript einzufügen, das die Aufgabe erfüllt?

Antwort

1

Hier ist ein Weg, es zu tun, mit invalidateLater und updateTabItems:

app.R:

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(title = "Sample Shiny"), 
    dashboardSidebar(
    sidebarMenu(
     id = 'tabs', 
     menuItem("Tab 1", tabName = "tab1"), 
     menuItem("Tab 2", tabName = "tab2") 
    ) 
), 
    dashboardBody(
    tabItems(
     tabItem(
     "tab1", 
     fluidRow(
      box(title = "Foo") 
     ) 
    ), 
     tabItem(
     "tab2", 
     fluidRow(
      box(title = "Bar") 
     ) 
    ) 
    ) 
) 
) 

tabnames = c('tab1', 'tab2') 
server <- function(input, output, session) { 
    #keep track of active tab 
    active <- reactiveValues(tab = 1) 

    observe({ 
    #Change every 5 secs, you can set this to whatever you want 
    invalidateLater(5000,session) 
    #update tab 
    isolate(active$tab <- active$tab%%length(tabnames) + 1) 
    updateTabItems(session,'tabs',tabnames[active$tab]) 
    }) 
} 

shinyApp(ui = ui, server = server) 
+0

Danke, das völlig macht den Job! – ottlngr

Verwandte Themen