html - pagina - Enlazando a una pestaña o panel de una aplicación brillante
inspeccionar elemento firefox android (4)
¿Cómo logro vincular desde una parte brillante determinada a partes que están ubicadas en otras pestañas / paneles?
Actualizar
La solución que redacté a continuación funciona para el caso explícito de vincular a pestañas / paneles (y eso es lo que pedí).
Sin embargo, me interesaría saber también formas más genéricas de vincular partes de una aplicación brillante.
Ejemplo
Me gustaría vincular desde el panel A al panel B, pero no estoy seguro de qué debo especificar como acción cuando se hace clic en el enlace de acción en el panel A.
El valor #tab-4527-2
proviene de la investigación de la salida HTML de ui
, pero acabo de ver que esos valores cambian cada vez que reinicio la aplicación.
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)
La siguiente solución se basa en las entradas que recibí de los comentarios.
Tenga en cuenta que updateTabsetPanel()
pertenece a shiny
mientras que updateTabItems()
es una función del paquete shinydashboard
. Parecen funcionar indistintamente.
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)
Esto es realmente útil y lo que quiero. De acuerdo con el código y la lógica de Rappster. Es posible establecer cualquier tipo de enlaces. Enlace a TabsetPanel
puede ser utilizado por updataTabsetPanel
. El enlace a Navbar
puede usar updateNavbarPage(session, inputId, selected = NULL)
. Estos pueden ser encontrados por ?updateTabsetPanel
siguiente manera.
updateTabsetPanel(session, inputId, selected = NULL)
updateNavbarPage(session, inputId, selected = NULL)
updateNavlistPanel(session, inputId, selected = NULL)
Tenga en cuenta que selected
es la nueva identificación que puede definir para tabsetPanel
, Navbar
o NavlistPanel
.
Acabamos de lanzar una biblioteca de enrutamiento , lo que facilita el enlace en Shiny. Así es como se ve en pocas palabras.
make_router(
route("<your_app_url>/main", main_page_shiny_ui),
route("<your_app_url>/other", other_page_shiny_ui)
)
Se puede encontrar más información en esta publicación de blog .
Puedes darle a tu tabsetPanel
una identificación y usar updateTabsetPanel
con tu 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)