当用户不在这个标签页中时,在闪亮应用中隐藏一个标签页。或者停用它

问题描述 投票:1回答:1

我有下面这个闪亮的仪表盘,我已经把列的单元格做成了 Species 交互式的方式,如果用户点击该列中的一个词,例如 "setosa",就会移动到标签页。Species.这是唯一的方式,有人可以移动到这个标签。问题是,我不希望这个标签页是 Species 当用户不在这个标签页中时,就会显示。第二种解决方案是停用 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) {
    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")
      }
    })

  }
)
r shiny dt
1个回答
1
投票

更新。 观察 input$dt1_cells_selected 并将该值在 observeEvent 以允许相同的单元格选择重新触发标签打开。您将需要使用 dataTableProxy 来实现这一目的。

您可以使用 hideTabshowTab 以反应性地隐藏和显示标签,但仍能通过点击数据表导航到它。更多信息在这里. 我在 "物种 "选项卡中添加了一个表格输出,这样我们就可以知道它是否已经正确切换。通过在 "物种 "选项卡的周围添加一个观察事件(observeEvent),我们就可以知道它是否正常切换了。input$myTabsetPanel 我们可以让 "物种 "选项卡隐藏起来,每当 input$myTabsetPanel == 文件:

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)
      }
    })


  }
)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.