链接到闪亮应用程序的选项卡或面板

时间:2015-12-16 15:08:48

标签: html r hyperlink shiny href

如何设置从给定的闪亮部件链接到位于其他标签/面板上的部件?

更新

我在下面草拟的解决方案适用于链接到标签/面板的明确情况(这就是我要求的)。

但是,我也有兴趣了解更多关于连接闪亮应用程序部分的通用方法。

实施例

我想从面板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)

4 个答案:

答案 0 :(得分:7)

以下解决方案基于我从评论中获得的输入。

请注意,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)

答案 1 :(得分:3)

我们刚刚发布了routing library,这使得Shiny中的链接变得简单。简而言之,这就是它的样子。

make_router(
   route("<your_app_url>/main",  main_page_shiny_ui),
   route("<your_app_url>/other", other_page_shiny_ui)
)

可在此blog post中找到更多信息。

答案 2 :(得分:2)

您可以为tabsetPanel个人提供updateTabsetPanelobserveEvent

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)

答案 3 :(得分:0)

这真的很有用,也是我想要的。根据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是您可以为tabsetPanelNavbarNavlistPanel定义的新ID。