外部链接到Shiny App中的特定tabPanel

时间:2015-10-08 16:56:25

标签: r shiny

可以相对轻松地在平面闪亮应用中使用锚点链接 - 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

使用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"))
  ))

2 个答案:

答案 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)