Добавление дочернего элемента во вложенный массив, добавление ко всем дочерним представлениям

Это немного взломанный, но вы можете использовать модальный диалог для тиражирования целевой страницы.

В основном, используйте встроенную команду showModal(modalDialog()) Shiny, чтобы панель всплывала над приложением. Модаль создается в observeEvent() в server.R, который запускается ровно один раз, когда приложение запускается. Пользовательский CSS включен в скрипт ui.R, который заставляет модальный охватить всю страницу. Вот приложение:

ui.R

library(shinydashboard)


ui <- dashboardPage(

  dashboardHeader(title = "Basic dashboard"),
  ## ui.R ##

  dashboardSidebar(
    sidebarMenu(
      menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
      menuItem("Widgets", tabName = "widgets", icon = icon("th"))
    )
  ),

  dashboardBody(

    tags$head(tags$style(HTML('
      .modal.in .modal-dialog{
        width:100%;
        height:100%;
        margin:0px;
      }

      .modal-content{
        width:100%;
        height:100%;
      }
    '))),

    tabItems(
      # First tab content
      tabItem(tabName = "dashboard",
        fluidRow(
          box(plotOutput("plot1", height = 250)),

          box(
            title = "Controls",
            sliderInput("slider", "Number of observations:", 1, 100, 50)
          )
        )
      ),

      # Second tab content
      tabItem(tabName = "widgets",
        h2("Widgets tab content")
      )
    )
  )
)

server.R

library(shiny)
library(shinydashboard)

server <- function(input, output) {
  set.seed(122)
  histdata <- rnorm(500)

  observeEvent(once = TRUE,ignoreNULL = FALSE, ignoreInit = FALSE, eventExpr = histdata, { 
    # event will be called when histdata changes, which only happens once, when it is initially calculated
    showModal(modalDialog(
      title = "Landing Page", 
      h1('Landing Page'),
      p('Theoretically you can put whatever content you want in here')
    ))
  })

  output$plot1 <- renderPlot({
    data <- histdata[seq_len(input$slider)]
    hist(data)
  })
}

Несколько предостережений:

  • CSS изменяет каждый модальный диалог в приложении, поэтому вам нужно будет добавить определенные классы к этому первому модальному моменту, чтобы все модалы не были полноэкранными. Модальная техническая загрузка после загрузки пользовательского интерфейса, поэтому есть короткая секунда, когда пользователь может видеть приложение в фоновом режиме.

Я полагаю, что вы сможете исправить последнее, ища событие, соответствующее серверу, загружающему приложение, но, к сожалению, я не знаком с каким-либо таким событием.

-1
задан Ravi 28 March 2019 в 14:35
поделиться