闪亮的navbarPage中的搜索字段

drm*_*iod 2 r twitter-bootstrap shiny

我试图让一个全球搜索领域进入我的navbarPage一些tabPanel.我不确定是否可能,因为我所有的测试都产生了textInput外部的navbar.

rStudio闪亮布局指南指向bootstrap navbar文档,他们实际上就是这样做的.但我无法使用我的闪亮应用程序重现它.

library(shiny)

ui <- shinyUI(
  shiny::navbarPage('test',
    shiny::tabPanel('my app',
   fluidPage(

  # Application title
  titlePanel("Old Faithful Geyser Data"),

  # Sidebar with a slider input for number of bins
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30)
    ),

    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("distPlot")
    )
  ))),

  ### Still inside navbarPage
  shiny::textInput("text", 
                   label=h3("Text input"), 
                   value="should be inside the navbar!")
))

server <- function(input, output, session) {
  output$distPlot <- renderPlot({

    # generate bins based on input$bins from ui.R
    x    <- faithful[, 2]
    bins <- seq(min(x), max(x), length.out = input$bins + 1)

    # draw the histogram with the specified number of bins
    hist(x, breaks = bins, col = 'darkgray', border = 'white')

  })
}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

Dea*_*ali 7

您可以通过稍微操纵导航栏HTML来完成此操作.Valter是正确的 - 你可以通过完全用HTML构建菜单而不是使用Shiny来实现这一点.但是有一种更简单的方法:你可以在常规的Shiny中构建导航栏,然后使用htmltools稍微修改它.这是一个快速的解决方案,我认为是目前提出的解决方案中最干净的解决方案:

library(shiny)

navbarPageWithInputs <- function(..., inputs) {
  navbar <- navbarPage(...)
  form <- tags$form(class = "navbar-form", inputs)
  navbar[[3]][[1]]$children[[1]] <- htmltools::tagAppendChild(
    navbar[[3]][[1]]$children[[1]], form)
  navbar
}

ui <- navbarPageWithInputs(
  "Test app",
  tabPanel("tab1", "tab 1", textOutput("out")),
  tabPanel("tab2", "tab 2"),
  inputs = textInput("search", NULL, placeholder = "Search")
)

server <- function(input, output, session) {
  output$out <- renderText(input$search)
}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

基本上我创建了一个navbarPageWithInputs()接受所有相同参数的函数,navbarPage()也是一个inputs参数.所有这个函数都调用常规函数navbarPage(),然后将给定的输入添加到HTML中.