闪亮选择使用操作按钮或其他东西去不同的tabPanel

时间:2014-09-18 19:08:16

标签: r shiny shiny-server

我为闪亮的应用程序构建了以下模板。

      ##ui.R
      shinyUI(navbarPage("My Application",
      tabPanel
      (
        "Select Data range",
        sidebarLayout
        (
            sidebarPanel
            (
                h3("Select Data Range"),
                selectInput("select", label = h3("Select Sector"),choices = list("Sector 1" = 1, "Sector 2" = 2,"Sector 3" = 3), selected = 1),br(),
                dateRangeInput("dates", label = h3("Select Date range")),br(),
                submitButton("Submit"),br(),
                actionButton("action", label = "Proceed to select resolution")
            ),
            mainPanel("Output")
        )
      ),

      tabPanel
      (
        "Select Resolution",
        sidebarLayout
        (
            sidebarPanel
            (
                h3("Select Resolution"),
                numericInput("num", label = h3("Select X-Grid Size"), value = 2),br(),
                numericInput("num", label = h3("Select Y-Grid Size"), value = 2),br(),
                numericInput("num", label = h3("Outlier Removal"), value = 2),br(),
                numericInput("num", label = h3("Frequency"), value = 2),br(),
                submitButton("Submit"),br(),
                #actionButton("action", label = "Proceed to Service Parameters")
            ),
            mainPanel("Output")
        )
      )

    ))

现在服务器文件保持为空:

      ##server.R
      shinyServer(function(input, output) {
      })

理想情况下,我想在第一个tabPanel上使用类似操作按钮的输入来导航到第二个选项卡面板。任何关于替代方案的建议都会受到同样的赞赏。

1 个答案:

答案 0 :(得分:7)

您可以发送自定义消息:

ui.R

shinyUI(navbarPage("My Application",

               tabPanel
               (
                 "Select Data range",
                 sidebarLayout
                 (
                   sidebarPanel
                   (tags$head(tags$script('
                                     Shiny.addCustomMessageHandler("myCallbackHandler",
                                       function(typeMessage) {console.log(typeMessage)
                                          if(typeMessage == 1){
                                          console.log("got here");
                                          $("a:contains(Select Resolution)").click();
                                          }
                                          if(typeMessage == 2){
                                          $("a:contains(Select Data range)").click();
                                          }
                                          });
                                          ')),
                     h3("Select Data Range"),
                     selectInput("select", label = h3("Select Sector"),choices = list("Sector 1" = 1, "Sector 2" = 2,"Sector 3" = 3), selected = 1),br(),
                     dateRangeInput("dates", label = h3("Select Date range")),br(),
                     actionButton("action", label = "Proceed to select resolution")
                   ),
                   mainPanel("Output")
                 )
               ),

               tabPanel
               (
                 "Select Resolution",
                 sidebarLayout
                 (
                   sidebarPanel
                   (
                     h3("Select Resolution"),
                     numericInput("num1", label = h3("Select X-Grid Size"), value = 2),br(),
                     numericInput("num2", label = h3("Select Y-Grid Size"), value = 2),br(),
                     numericInput("num3", label = h3("Outlier Removal"), value = 2),br(),
                     numericInput("num4", label = h3("Frequency"), value = 2),br(),
                     actionButton("action1", label = "Proceed to Service Parameters")

                   ),
                   mainPanel("Output"),

                 )
               )

))

server.R

library(shiny)
shinyServer(function(input, output,session) {
  observe({
    if(input$action > 0){
      print('1')
      session$sendCustomMessage("myCallbackHandler", "1")
    }
  })
  observe({
    if(input$action1 > 0){
      print('2')
      session$sendCustomMessage("myCallbackHandler", "2")
    }
  })
}
)

此外,您不能拥有具有相同ID的对象。请注意,您的所有numericInputactionButton都具有相同的ID。此外,我删除了提交按钮,不确定您是否需要其中一个。