【问题标题】:populate tabItems in dashboardBody在dashboardBody中填充tabItems
【发布时间】:2018-05-20 15:48:16
【问题描述】:

如何使用需要一些动态输入的代码在 shinydashboard 中使用 tabItem 元素填充 tabItems?

我正在做的示例如下。单击按钮时,该代码将起作用并生成额外的选项卡。 TODO 行解释了我遇到的困难。我想通过代码为每个选项卡添加 tabItem,而不是明确放置 tab0、tab1 等。

ui.R

library(shiny)
library(shinydashboard)


dashboardPage(

  dashboardHeader(title = "EXAMPLE MULTI TABS"),
  dashboardSidebar( 
    sidebarMenuOutput("menu"),
    actionButton("add", label = "Add tab")),
  dashboardBody(uiOutput("body1"))
)

服务器.R

library(shiny)
library(shinydashboard)
# example server
function(input, output) {
    output$menu <- renderMenu(

      sidebarMenu(
        # adding sub items if action button pressed
        do.call(menuItem, c(text = "Example tabs", tabName = "settings", startExpanded = T,
                            lapply(0:input$add, function(i) {
                              menuSubItem(text = paste0("sub menu ", i), tabName=paste0("tab",i))
                        }
                        )))
  ))

# body for different tabs
output$body1 <- renderUI({
  tabItems(
    #TODO: add tabs content based on number of tabs that is defined by action button value
    tabItem(tabName = "tab0",
            uiOutput("tab0")),
    tabItem(tabName = "tab1",
            uiOutput("tab1"))
  )
})

# add tab content for each tab
observe({
  for (i in 0:input$add) {
    local({
      my_i <- i
      tabname <- paste0("tab",my_i)
      output[[tabname]] <- renderUI({
        box(
          renderText(paste0("tab",my_i))
          )
        })
      })
    }
  })
}

【问题讨论】:

  • This 应该有帮助!

标签: r shiny shinydashboard


【解决方案1】:

感谢您的链接。 我搞定了。

这是工作服务器。R:

library(shiny)
library(shinydashboard)
# example server
function(input, output) {
    output$menu <- renderMenu(

      sidebarMenu(id = "tabs",
        # adding sub items if action button pressed

        do.call(menuItem, c(text = "Example tabs", tabName = "settings", startExpanded = T,
                            lapply(0:input$add, function(i) {
                              menuSubItem(text = paste0("sub menu ", i), tabName=paste0("tab",i))
                        }
                        )))
  ))

# body for different tabs
output$body1 <- renderUI({
  if (input$add == 0) {
    return(NULL)
  }
  Tabs <- vector("list", input$add)
  for(i in 1:input$add) {
      tabname <- paste0("tab",i)
      Tabs[[i]] <- tabItem(tabName = tabname, uiOutput(tabname))
  }
  do.call(tabItems, Tabs)
})

tabContent <- reactive(input[[input$tabs]])

# add tab content for each tab
observe({
  if (input$add == 0) {
    return(NULL)
  }

  for (i in 1:input$add) {
    local({
      my_i <- i
      tabname <- paste0("tab",my_i)
      output[[tabname]] <- renderUI({
        box(
          renderText(paste0("tab",my_i))
          )
        })
      })

    }
  })
}

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多