我有下面这个闪亮的仪表盘,我已经把列的单元格做成了 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")
}
})
}
)
更新。 观察 input$dt1_cells_selected
并将该值在 observeEvent
以允许相同的单元格选择重新触发标签打开。您将需要使用 dataTableProxy
来实现这一目的。
您可以使用 hideTab
和 showTab
以反应性地隐藏和显示标签,但仍能通过点击数据表导航到它。更多信息在这里. 我在 "物种 "选项卡中添加了一个表格输出,这样我们就可以知道它是否已经正确切换。通过在 "物种 "选项卡的周围添加一个观察事件(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)
}
})
}
)