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

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)

Rap*_*ter 8

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

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


Krz*_*bel 5

我们刚刚发布了一个路由库,它使 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)


eh2*_*h21 5

我正在努力解决同样的问题,并且真的想通过 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)