可以相对轻松地在平面闪亮应用中使用锚点链接 - https://stackoverflow.com/a/28605517/1659890。
但是,外部链接是否可以在闪亮的应用中定位tabPanel
的特定navbarPage
?
考虑以下测试应用: UI:
shinyUI(navbarPage(
"Anchor Test",
tabPanel(
"Panel 1", fluidPage(HTML(
paste(
"<p>I'm the first panel</p>","<p><a href='#irisPlotUI'>Link to irisPlotUI in panel 2</a></p>",
"<a href='#panel2'>Link to panel 2</a>",sep = ""
)
))
),
tabPanel("Panel 2", fluidPage(
"I'm the second panel", uiOutput("irisPlotUI")
),
value = "#panel2"),
tabPanel("Panel 3", "I'm a table!!!")
服务器:
shinyServer(function(input, output) {
output$irisPlotUI <- renderUI(plotOutput("irisPlot"))
output$irisPlot <- renderPlot(plot(iris$Sepal.Length))
})
使用链接答案中的方法不起作用,irisPlotUI
的ID是正确的,但是该剧情所居住的tabPanel
的孩子。
data-value
的{{1}}通过使用参数tabPanel
获得"panel2"
的值,但Shiny应用继续提供value
我不知道如何定位的唯一ID。
我已经检查了部署的Shiny应用的来源,例如https://martinjhnhadley.shinyapps.io/AnchorLinks,并找到了tabPanel
的实际链接:https://internal.shinyapps.io/martinjhnhadley/AnchorLinks/?initialWidth=1074&childId=shinyapp#tab-8850-2
但是,直接导航到此链接也不会将我定向到标签。
锚点链接是我唯一的选项,可以定位应用程序的某些部分,还是有一个闪亮的特定解决方案?
如果没有,我如何插入此处显示的脚本https://stackoverflow.com/a/15637801/1659890以允许在登录Shiny应用程序时执行javascript,以与{{3}类似的方式选择tabPanel
}}
使用daattali的回答我也能从他那里找到以下内容 - https://groups.google.com/d/msg/shiny-discuss/sJlasQf71fY/RW7Xc8F02IoJ
以下内容完全符合我的需求,请注意我已选择遵守他使用的tabPanel
惯例:
UI.R
/?url=
SERVER.R
shinyUI(
navbarPage( "test", id = 'someID',
tabPanel("tab1", h1("page1")),
navbarMenu( "menu",
tabPanel('tab2a', value='nested1', h1("page2a")),
tabPanel('tab2b', value='nested2', h1("page2b")),
tabPanel('tab_sub', "foobar")
),
tabPanel("tab3", h1("page3"))
))
答案 0 :(得分:2)
您可以在URL中添加搜索查询参数(例如href='www.myapp.com?tab=tab2
),并且在正在链接的应用中,您必须添加一些逻辑,这些逻辑在初始化时会更改为指定的选项卡,如果搜索字符串存在(例如,查看session$clientData$url_search
以及是否存在并且有tab
变量,然后使用updateTabsetPanel()
转到该标签页
答案 1 :(得分:2)
我发现其他答案有点难以理解,因此我创建了以下示例。要导航到“数据可用性”选项卡,请在网址末尾添加“?a = b”。例如,如果在端口7436上托管应用程序,则以下链接将直接带您进入“数据可用性”页面。 http://127.0.0.1:7436/?a=b
library(shinydashboard)
library(shiny)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(id = "container",
menuItem("Channels", tabName = "lt_channels"),
menuItem("Data Availability", tabName = "data_avail")
)),
dashboardBody(
tabItems(
tabItem(tabName = "lt_channels",
h1("Test Fail")),
tabItem(tabName = "data_avail",
h1("Test Pass"))
)
)
)
server <- function(session, input, output){
observe({
query <- parseQueryString(session$clientData$url_search)
query1 <- paste(names(query), query, sep = "=", collapse=", ")
print(query1)
if(query1 == "a=b"){
updateTabItems(session, inputId = "container", selected = "data_avail")
}
})
}
shinyApp(ui = ui, server = server)