如何设置从给定的闪亮部件链接到位于其他标签/面板上的部件?
我在下面草拟的解决方案适用于链接到标签/面板的明确情况(这就是我要求的)。
但是,我也有兴趣了解更多关于连接闪亮应用程序部分的通用方法。
我想从面板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)
答案 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
个人提供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)
答案 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
是您可以为tabsetPanel
,Navbar
或NavlistPanel
定义的新ID。