Rap*_*ter 13 html r href hyperlink shiny
如何设置从给定的闪亮部件链接到位于其他选项卡/面板上的部件?
我在下面草拟的解决方案适用于链接到标签/面板的明确情况(这就是我要求的).
但是,我也有兴趣了解更多通用方法来链接闪亮应用程序的各个部分.
我想从面板A链接到面板B,但是当我点击面板A中的操作链接时,我不太清楚我需要指定什么作为动作.
价值#tab-4527-2来自调查HTML输出ui,但我刚看到每次重新启动应用程序时这些值都会改变.
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)
Run Code Online (Sandbox Code Playgroud)
以下解决方案基于我从评论中获得的输入.
注意updateTabsetPanel()属于shinywhile 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)
Run Code Online (Sandbox Code Playgroud)
我们刚刚发布了一个路由库,它使 Shiny 中的链接变得容易。简而言之,它是这样的。
make_router(
route("<your_app_url>/main", main_page_shiny_ui),
route("<your_app_url>/other", other_page_shiny_ui)
)
Run Code Online (Sandbox Code Playgroud)
更多信息可以在这篇博文中找到。
小智 5
您可以提供您的tabsetPanelID 并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)
Run Code Online (Sandbox Code Playgroud)
我正在努力解决同样的问题,并且真的想通过 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)
Run Code Online (Sandbox Code Playgroud)