问:如何在新页面中制作闪亮的应用输出结果?

时间:2016-10-01 20:24:41

标签: shiny shinydashboard shinyjs

我正在尝试创建一个允许用户输入数据的应用程序,然后让闪亮的服务器计算一些结果,例如,我可以使闪亮生成绘图或数据表。

然而,由于UI的空间,我有点“耗尽”空间。输入框和应用程序文档占据整个屏幕。当闪亮产生结果时,它将显示在屏幕的最底部。

有没有办法让闪亮的弹出框显示结果?

我的sudo-code将是:

ui <- fluidPage(
    textInput("text", "Name"),
    numericInput("age", "Age", 20),
    actionButton("demo", "Fill in fields with demo"))
server <- function(input, output, session) {
    observeEvent(input$demo, {

            ****************************
            OpenNewPage/MoveScreenDown()
            ****************************

            updateTextInput(session, "text", value = H)
            updateNumericInput(session, "age", value = "30")
    })}

单击“演示”时,会弹出一个消息框,或者我可以将屏幕移动到结果部分,并允许文本位于屏幕顶部。

1 个答案:

答案 0 :(得分:0)

可以选择在单独的窗口中显示结果。但也许更容易将所有东西放在同一个窗口上。

您可以使用shinyBS库创建一个模态窗口来显示绘图。另一种选择是使用JavaScript将滚动条移动到页面底部。我在下面的示例中提供了两个选项,因此您可以看到哪个更适合您。

library(shiny)
library(shinyBS)
runApp(list(
  ui = shinyUI(fluidPage(
    textInput("text", "Name"),
    numericInput("age", "Age", 20),
    # option 1, using ShinyBS with a modal window
    actionButton("demo", "Using a modal"),
    # modal window to show the plot
    bsModal("largeModalID","Results", "demo", size = "large", plotOutput('plot')),       
    # Option 2, action button with a JavaScript function to move the scroll to the bottom
    # after drawing the plot.
    actionButton("demoJS", "Using JS", 
      # there is a delay to allow the renderPlot to draw the plot and you should
      # change it according to the processes performed
      onclick = "setTimeout( function() {
                  $('html, body').scrollTop( $(document).height() );},
                  300)"),         
    # to plot the results after click on "Using JS"
    uiOutput("plotUI")
   )
  ),
  server = shinyServer(function(input, output, session) {

    output$plot <- renderPlot({
      # simple plot to show
      plot(sin, -pi, 2*pi)
    })

    output$plotUI <- renderUI({
      # this UI will show a plot only if "Using JS" is clicked
      if (input$demoJS > 0)
        # the margin-top attribute is just to put the plot lower in the page
        div(style = "margin-top:800px", plotOutput('plot2'))
    })

    output$plot2 <- renderPlot({
      # another simple plot, 
      plot(sin, -pi, 2*pi)
    })

  })
))

如果您认为JavaScript选项对您更有效,您可以考虑开始使用shinyjs库,它包含非常有用的功能,您可以轻松地将自己的JavaScript代码添加到闪亮的应用程序中。