当用户不在这个选项卡中时,在闪亮的应用程序中隐藏一个选项卡。或停用它

Hide a tab in shiny app when the user is not in this tab. Or deactivate it

我在下面有闪亮的仪表板,并且我已经使列 Species 的单元格具有交互性,如果用户单击该列的一个词,例如 'setosa',移动到选项卡 Species。这是唯一可以移动到此选项卡的方法。问题是当用户不在此选项卡中时,我不希望显示选项卡 Species。第二种解决方案是停用 Species 'click on' 能力。所以如果用户不小心按下它,什么也不会发生。

    library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(DT)

shinyApp(
  ui = dashboardPagePlus(
    header = dashboardHeaderPlus(),
    sidebar = dashboardSidebar(),
    body = dashboardBody(tabsetPanel(
      id = "myTabsetPanel",
      tabPanel("Documents",
               DTOutput("dt1")),
      tabPanel("Species",
               DTOutput("dt2"))
    )),

  ),
  server = function(input, output, session) {
    output$dt1 <- renderDT(
      iris,
      filter = "top",
      options = list(pageLength = 5),
      selection = list(mode = 'single', target = 'cell')
    )
    output$dt2 <- renderDT(
      mtcars,
      filter = "top",
      options = list(pageLength = 5),
      selection = list(mode = 'single', target = 'cell')
    )
    observeEvent(input$dt1_cell_clicked, {
      # alternative: input$dt1_cells_selected
      if (req(input$dt1_cell_clicked$value) == "setosa") {
        updateTabsetPanel(session, inputId = "myTabsetPanel", selected = "Species")
      }
    })

  }
)

更新: 观察 input$dt1_cells_selected 并重置 observeEvent 末尾的值以允许相同的单元格选择重新触发选项卡打开.您将需要使用 dataTableProxy 来执行此操作。

您可以使用 hideTabshowTab 来响应地隐藏和显示选项卡,但仍然可以通过数据点击 table 导航到它。 More info here。我在 "Species" 选项卡中添加了一个 table 输出,这样我们就可以判断它是否已正确切换。通过在 input$myTabsetPanel 周围添加一个 observeEvent,我们可以在 input$myTabsetPanel == Documents:

时隐藏 "Species" 选项卡
library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(DT)

shinyApp(
  ui = dashboardPagePlus(
    header = dashboardHeaderPlus(),
    sidebar = dashboardSidebar(),
    body = dashboardBody(tabsetPanel(
      id = "myTabsetPanel",
      tabPanel("Documents",
               DTOutput("dt1")),

      tabPanel("Species",
               DTOutput("dt2"))
    ))

  ),
  server = function(input, output, session) {

    observeEvent(input$myTabsetPanel, {
      if(input$myTabsetPanel == "Documents"){
        hideTab("myTabsetPanel", "Species")
      }
    })

    output$dt1 <- renderDT(
      iris,
      filter = "top",
      options = list(pageLength = 5),
      selection = list(mode = 'single', target = 'cell')
    )

    output$dt2 <- renderDT(
      mtcars,
      filter = "top",
      options = list(pageLength = 5),
      selection = list(mode = 'single', target = 'cell')
    )



    myProxy = DT::dataTableProxy('dt1')


    observeEvent(input$dt1_cells_selected,{
      # alternative: input$dt1_cells_selected
      if (req(input$dt1_cell_clicked$value) == "setosa") {
        showTab("myTabsetPanel", "Species")
        updateTabsetPanel(session, inputId = "myTabsetPanel", selected = "Species")
        DT::selectCells(myProxy, NULL)
      }
    })


  }
)