[英]Linking to a tab or panel of a shiny app
我如何设法从给定的闪亮部件链接到位于其他选项卡/面板上的部件?
我在下面起草的解决方案适用于链接到选项卡/面板的明确情况(这就是我所要求的)。
但是,我也有兴趣了解链接闪亮应用程序部分的更通用方法。
我想从面板 A 链接到面板 B,但我不太确定单击面板 A 中的操作链接时需要将什么指定为操作。
值#tab-4527-2
来自调查ui
的 HTML 输出,但我只是看到每次重新启动应用程序时这些值都会发生变化。
library(shiny)
# UI ---------------------------------------------------------------------
ui <- fluidPage(
tabsetPanel(
tabPanel(
"A",
p(),
actionLink("link_to_tabpanel_b", "Link to panel B")
),
tabPanel(
"B",
h3("Some information"),
tags$li("Item 1"),
tags$li("Item 2")
)
)
)
# Server ------------------------------------------------------------------
server <- function(input, output, session) {
observeEvent(input$link_to_tabpanel_b, {
tags$a(href = "#tab-4527-2")
})
}
shinyApp(ui, server)
以下解决方案基于我从评论中获得的输入。
注意, updateTabsetPanel()
属于shiny
而updateTabItems()
是一个函数shinydashboard
包。 它们似乎可以互换工作。
library(shiny)
library(shinydashboard)
# UI ---------------------------------------------------------------------
ui <- fluidPage(
tabsetPanel(
id = "panels",
tabPanel(
"A",
p(),
actionLink("link_to_tabpanel_b", "Link to panel B")
),
tabPanel(
"B",
h3("Some information"),
tags$li("Item 1"),
tags$li("Item 2"),
actionLink("link_to_tabpanel_a", "Link to panel A")
)
)
)
# Server ------------------------------------------------------------------
server <- function(input, output, session) {
# observeEvent(input$link_to_tabpanel_b, {
# tags$a(href = "#tab-4527-2")
# })
observeEvent(input$link_to_tabpanel_b, {
newvalue <- "B"
updateTabItems(session, "panels", newvalue)
})
observeEvent(input$link_to_tabpanel_a, {
newvalue <- "A"
updateTabsetPanel(session, "panels", newvalue)
})
}
shinyApp(ui, server)
你可以给你tabsetPanel
ID和使用updateTabsetPanel
与observeEvent
library(shiny)
# UI ---------------------------------------------------------------------
ui <- fluidPage(
tabsetPanel(id = "demo",
tabPanel(
"A",
p(),
actionLink("link_to_tabpanel_b", "Link to panel B")
),
tabPanel(
"B",
h3("Some information"),
tags$li("Item 1"),
tags$li("Item 2")
)
)
)
# Server ------------------------------------------------------------------
server <- function(input, output, session) {
observeEvent(input$link_to_tabpanel_b, {
updateTabsetPanel(session, "demo", "B")
})
}
shinyApp(ui, server)
我正在为同样的问题苦苦挣扎,并且真的想通过 URL链接到不同的选项卡。 感谢thesadie的简单示例并通过使用观察来解析来自 url 的输入,对我来说以下工作(并且可以通过将/?tab=B添加到 URL 来切换选项卡,例如 http://localhost :1234/?tab=B):
library(shiny)
# UI ---------------------------------------------------------------------
ui <- fluidPage(
tabsetPanel(id = "demo",
tabPanel(
"A",
p(),
actionLink("link_to_tabpanel_b", "Link to panel B")
),
tabPanel(
"B",
h3("Some information"),
tags$li("Item 1"),
tags$li("Item 2")
)
)
)
# Server ------------------------------------------------------------------
server <- function(input, output, session) {
# Allow url parsing
observe({
query <- parseQueryString(session$clientData$url_search)
if (!is.null(query)) {
for (name in names(query)) {
if (name == "tab") {
# Change tab
try(updateTabsetPanel(session, "demo", selected = query[[name]]))
} else {
# Update inputs - this part is not really necessary if you just want to change the tabs,
# but I also needed to update other inputs from the url
try(updateTextInput(session, name, value = query[[name]]), silent = TRUE)
}
}
}
})
observeEvent(input$link_to_tabpanel_b, {
updateTabsetPanel(session, "demo", "B")
})
}
shinyApp(ui, server)
根据 Rappster 的代码和逻辑。 可以设置任何类型的链接。 TabsetPanel
可以使用updataTabsetPanel
。 链接到Navbar
可以使用updateNavbarPage(session, inputId, selected = NULL)
这些可以通过?updateTabsetPanel
找到,如下所示。
updateTabsetPanel(session, inputId, selected = NULL)
updateNavbarPage(session, inputId, selected = NULL)
updateNavlistPanel(session, inputId, selected = NULL)
请注意selected
是您可以为tabsetPanel
、 Navbar
或NavlistPanel
定义的新 ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.