如何在shinydashboard中的两个tabItem中添加相同的输入?

时间:2016-03-07 07:29:22

标签: r shiny shinydashboard

我正在使用shinydashboard来创建我闪亮App的界面。但是我想要一个输入出现在两个tabMenu中。在下面的示例中,我想textInput i_test出现在菜单menu1menu2中。

我该如何实施?感谢您的任何建议。

library(shiny)
library(shinydashboard)

# Side bar boardy
sidebar <- dashboardSidebar(
    sidebarMenu(
        id = 'menu_tabs'
        , menuItem('menu1', tabName = 'menu1')
        , menuItem('menu2', tabName = 'menu2')
        , menuItem('menu3', tabName = 'menu3')
    )
)

# Body board
body <- dashboardBody(
    tabItems(
        tabItem(
            tabName = 'menu1',
            textInput('i_test', 'Test')
        ),
        tabItem(
            tabName = 'menu2'
        )
    )
)

# Shiny UI
ui <- dashboardPage(
    title = 'test',
    dashboardHeader(),
    sidebar,
    body
)

server <- function(input, output, session) {
}

shinyApp(ui, server)

1 个答案:

答案 0 :(得分:1)

似乎闪亮总是呈现两个不同的元素,即使您尝试第二次构建相同的元素。

这就是为什么我只能提出一个解决方案,只能让它看起来像两个文本输出是一样的。

检查代码:

library(shiny)
library(shinydashboard)

# Side bar boardy
sidebar <- dashboardSidebar(
  sidebarMenu(
    id = 'menu_tabs'
    , menuItem('menu1', tabName = 'menu1')
    , menuItem('menu2', tabName = 'menu2')
    , menuItem('menu3', tabName = 'menu3')
  )
)

# Body board
body <- dashboardBody(
  tabItems(
    tabItem(
      tabName = 'menu1',
      textInput('i_test_1', 'Test')
    ),
    tabItem(
      tabName = 'menu2',
      textInput('i_test_2', 'Test')
    ),
    tabItem(
      tabName = 'menu3'
    )
  )
)

# Shiny UI
ui <- dashboardPage(
  title = 'test',
  dashboardHeader(),
  sidebar,
  body
)

server <- function(input, output, session) {

  observe({
    text1 <- input$i_test_1        
    updateTextInput(session, 'i_test_2', value = text1)
  })
  observe({
    text2 <- input$i_test_2        
    updateTextInput(session, 'i_test_1', value = text2)
  })

}

shinyApp(ui, server)